<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Falco – The Falco Project</title><link>https://v0-43--falcosecurity.netlify.app/docs/</link><description>Recent content in The Falco Project on Falco</description><generator>Hugo -- gohugo.io</generator><language>en</language><atom:link href="https://v0-43--falcosecurity.netlify.app/docs/feed.xml" rel="self" type="application/rss+xml"/><item><title>Docs: Performance</title><link>https://v0-43--falcosecurity.netlify.app/docs/troubleshooting/performance/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://v0-43--falcosecurity.netlify.app/docs/troubleshooting/performance/</guid><description>
&lt;p&gt;First and foremost, if something goes seriously wrong during Falco deployment, it's usually noticeable immediately. On a longer time scale, continuous performance monitoring and quality assurance, driven by the right metrics, ensure Falco functions as expected 24/7.&lt;/p&gt;
&lt;p&gt;As a security tool, Falco requires checking for a healthy deployment on multiple dimensions:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Resource utilization and system impact: Strive to minimize compute overhead while ensuring the desired monitoring scope is achieved.&lt;/li&gt;
&lt;li&gt;Disruption/upgrades: Ensure minimal downtime and avoid interruptions to the service, minimizing restarts.&lt;/li&gt;
&lt;li&gt;Data quality assurance: Verify that Falco outputs contain the desired quality with little to no missing data.&lt;/li&gt;
&lt;li&gt;End-to-end data pipeline testing: Ensure alerts reach their end destination as quickly as possible.&lt;/li&gt;
&lt;li&gt;Security monitoring capabilities: Adopting the right Falco rules and resilience to bypasses by attackers.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The Falco Project provides guidance on some of these aspects, and there are ongoing long-term efforts, including a &lt;a href="https://github.com/falcosecurity/cncf-green-review-testing/tree/main"&gt;partnership&lt;/a&gt; with the CNCF TAG Environmental Sustainability, aimed at enhancing Falco's performance and assessing its impact on the system. These efforts are intended to make it easier for adopters to assess the actual impact on their systems, enabling them to make informed decisions about the cost-security monitoring tradeoffs.&lt;/p&gt;
&lt;h2 id="resource-utilization-and-system-impact"&gt;Resource Utilization and System Impact&lt;/h2&gt;
&lt;p&gt;The Falco Project provides native support for measuring resource utilization and statistics, including event drop counters, kernel tracepoint invocation counters, timeouts, and internal state handling. More detailed information is given in the &lt;a href="https://v0-43--falcosecurity.netlify.app/docs/metrics/"&gt;Falco Metrics&lt;/a&gt; Guide.&lt;/p&gt;
&lt;h3 id="cpu-and-memory-utilization"&gt;CPU and Memory Utilization&lt;/h3&gt;
&lt;p&gt;On top of the mind for SREs or system admins is how much CPU and memory Falco will utilize on their hosts. They need to assess whether the cost is justified. To maintain excellent relationships with infrastructure teams, setting resource limits for your Falco deployment is crucial. This can be done through systemd or &lt;a href="https://kubernetes.io/docs/concepts/workloads/controllers/daemonset/"&gt;daemonset&lt;/a&gt; limits in a Kubernetes environment.&lt;/p&gt;
&lt;p&gt;This is an essential consideration because running a kernel tool always comes with specific challenges and considerations. For example, it could slow down the kernel or the request rates of applications.&lt;/p&gt;
&lt;p&gt;Top metrics:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;CPU usage: Typically measured as a percentage of one CPU, it can be compared with the number of available CPUs on the host. Falco's hot path is single-threaded, so it should not be able to exceed the capacity of one full CPU.&lt;/li&gt;
&lt;li&gt;Memory RSS: Resident Set Size is the portion of memory held in RAM by a process.&lt;/li&gt;
&lt;li&gt;Memory VSZ: Virtual Memory Size is the total memory allocated to a process, including both RAM and swap space.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://mohamedmsaeed.medium.com/memory-working-set-vs-memory-rss-in-kubernetes-which-one-you-should-monitor-8ef77bf0acee"&gt;container_memory_working_set_bytes&lt;/a&gt; in Kubernetes settings: This is almost equivalent to the cgroups container &lt;code&gt;memory_used&lt;/code&gt; metric natively exposed in Falco metrics.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Beyond monitoring the tool's utilization, check if your applications perform as before. This evaluation could include overall network, I/O, or general contention metrics.&lt;/p&gt;
&lt;p&gt;Read &lt;a href="https://v0-43--falcosecurity.netlify.app/docs/metrics"&gt;Falco Metrics&lt;/a&gt; next.&lt;/p&gt;
&lt;h3 id="server-load-and-falco-event-drops"&gt;Server Load and Falco Event Drops&lt;/h3&gt;
&lt;p&gt;A common misconception is to think that Falco has constant resource utilization. However, that is not accurate. Falco's utilization is directly dependent on the current workload on the host. The more system calls the applications make, the more work Falco has to handle. You can read our &lt;a href="https://github.com/falcosecurity/libs/blob/master/proposals/20230530-driver-kernel-testing-framework.md#why-does-kernel-testing-matter"&gt;Kernel Testing Framework Proposal&lt;/a&gt; for more insights into this topic.&lt;/p&gt;
&lt;p&gt;Read &lt;a href="https://v0-43--falcosecurity.netlify.app/docs/troubleshooting/dropping/"&gt;Falco Is Dropping Syscalls Events&lt;/a&gt; next.&lt;/p&gt;
&lt;p&gt;Top metrics:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Kernel side and userspace event counts.&lt;/li&gt;
&lt;li&gt;Kernel side and userspace event drop counts.&lt;/li&gt;
&lt;li&gt;Kernel tracepoint invocation counts to deduce the overall server load.&lt;/li&gt;
&lt;li&gt;Userspace timeouts.&lt;/li&gt;
&lt;li&gt;Falco internal state counters.&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>Docs: Deploy on Kubernetes with the Operator</title><link>https://v0-43--falcosecurity.netlify.app/docs/setup/operator/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://v0-43--falcosecurity.netlify.app/docs/setup/operator/</guid><description>
&lt;div class="card card-sm pageinfo pageinfo-primary my-4"&gt;
&lt;div class="card-body"&gt;
&lt;div class="card-text"&gt;
&lt;p&gt;The &lt;strong&gt;Falco Operator&lt;/strong&gt; is the recommended way to deploy and manage Falco on Kubernetes. It provides a declarative, Kubernetes-native experience for managing Falco instances, detection rules, plugins, and configuration through Custom Resources.&lt;/p&gt;
&lt;p&gt;Going forward, the Falco Operator will become the standard deployment method for Falco on Kubernetes. The existing &lt;a href="https://v0-43--falcosecurity.netlify.app/docs/setup/kubernetes/"&gt;Helm chart&lt;/a&gt; remains fully supported during the transition period.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id="overview"&gt;Overview&lt;/h2&gt;
&lt;p&gt;The &lt;a href="https://github.com/falcosecurity/falco-operator"&gt;Falco Operator&lt;/a&gt; manages the full Falco ecosystem through Kubernetes Custom Resources:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Falco Operator&lt;/strong&gt; - Manages Falco instances (DaemonSet or Deployment mode) and ecosystem components&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Artifact Operator&lt;/strong&gt; - Manages rules, plugins, and configuration fragments (runs as a sidecar in each Falco pod)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The operator uses &lt;strong&gt;five Custom Resource Definitions (CRDs)&lt;/strong&gt; across two API groups:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;CRD&lt;/th&gt;
&lt;th&gt;API Group&lt;/th&gt;
&lt;th&gt;Purpose&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Falco&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;instance.falcosecurity.dev/v1alpha1&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Define and manage a Falco instance&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Component&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;instance.falcosecurity.dev/v1alpha1&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Deploy ecosystem components (Falcosidekick, Falcosidekick UI, k8s-metacollector)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Rulesfile&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;artifact.falcosecurity.dev/v1alpha1&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Manage detection rules (OCI, inline YAML, or ConfigMap)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Plugin&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;artifact.falcosecurity.dev/v1alpha1&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Manage Falco plugins from OCI registries&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Config&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;artifact.falcosecurity.dev/v1alpha1&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Manage configuration fragments (inline YAML or ConfigMap)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="prerequisites"&gt;Prerequisites&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Kubernetes 1.29+ (native sidecar support required)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;kubectl&lt;/code&gt; installed and configured&lt;/li&gt;
&lt;li&gt;Cluster admin privileges (for CRD and ClusterRole installation)&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="install-the-operator"&gt;Install the Operator&lt;/h2&gt;
&lt;p&gt;Install the Falco Operator with a single command:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#b8860b"&gt;VERSION&lt;/span&gt;&lt;span style="color:#666"&gt;=&lt;/span&gt;latest
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;if&lt;/span&gt; &lt;span style="color:#666"&gt;[&lt;/span&gt; &lt;span style="color:#b44"&gt;&amp;#34;&lt;/span&gt;&lt;span style="color:#b8860b"&gt;$VERSION&lt;/span&gt;&lt;span style="color:#b44"&gt;&amp;#34;&lt;/span&gt; &lt;span style="color:#666"&gt;=&lt;/span&gt; &lt;span style="color:#b44"&gt;&amp;#34;latest&amp;#34;&lt;/span&gt; &lt;span style="color:#666"&gt;]&lt;/span&gt;; &lt;span style="color:#a2f;font-weight:bold"&gt;then&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; kubectl apply --server-side -f https://github.com/falcosecurity/falco-operator/releases/latest/download/install.yaml
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;else&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; kubectl apply --server-side -f https://github.com/falcosecurity/falco-operator/releases/download/&lt;span style="color:#b68;font-weight:bold"&gt;${&lt;/span&gt;&lt;span style="color:#b8860b"&gt;VERSION&lt;/span&gt;&lt;span style="color:#b68;font-weight:bold"&gt;}&lt;/span&gt;/install.yaml
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;fi&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;This creates:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;5 CRDs&lt;/li&gt;
&lt;li&gt;The &lt;code&gt;falco-operator&lt;/code&gt; namespace&lt;/li&gt;
&lt;li&gt;A ServiceAccount, ClusterRole, and ClusterRoleBinding&lt;/li&gt;
&lt;li&gt;The operator Deployment&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Verify the operator is running:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;kubectl get pods -n falco-operator
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;kubectl &lt;span style="color:#a2f"&gt;wait&lt;/span&gt; pods --for&lt;span style="color:#666"&gt;=&lt;/span&gt;&lt;span style="color:#b8860b"&gt;condition&lt;/span&gt;&lt;span style="color:#666"&gt;=&lt;/span&gt;Ready --all -n falco-operator
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="full-stack-quickstart"&gt;Full Stack Quickstart&lt;/h2&gt;
&lt;p&gt;Want to deploy the entire Falco ecosystem in one command? The quickstart manifest deploys everything in the &lt;code&gt;falco&lt;/code&gt; namespace: Falco, detection rules, container and k8smeta plugins, Falcosidekick, Falcosidekick UI with Redis, k8s-metacollector, and the configuration to wire them all together:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#b8860b"&gt;VERSION&lt;/span&gt;&lt;span style="color:#666"&gt;=&lt;/span&gt;latest
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;if&lt;/span&gt; &lt;span style="color:#666"&gt;[&lt;/span&gt; &lt;span style="color:#b44"&gt;&amp;#34;&lt;/span&gt;&lt;span style="color:#b8860b"&gt;$VERSION&lt;/span&gt;&lt;span style="color:#b44"&gt;&amp;#34;&lt;/span&gt; &lt;span style="color:#666"&gt;=&lt;/span&gt; &lt;span style="color:#b44"&gt;&amp;#34;latest&amp;#34;&lt;/span&gt; &lt;span style="color:#666"&gt;]&lt;/span&gt;; &lt;span style="color:#a2f;font-weight:bold"&gt;then&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; kubectl apply --server-side -f https://github.com/falcosecurity/falco-operator/releases/latest/download/quickstart.yaml
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;else&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; kubectl apply --server-side -f https://github.com/falcosecurity/falco-operator/releases/download/&lt;span style="color:#b68;font-weight:bold"&gt;${&lt;/span&gt;&lt;span style="color:#b8860b"&gt;VERSION&lt;/span&gt;&lt;span style="color:#b68;font-weight:bold"&gt;}&lt;/span&gt;/quickstart.yaml
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;fi&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Verify everything is running:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;kubectl get falco,plugins,rulesfiles,configs,components -n falco
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;kubectl get pods -n falco
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;All resources should show &lt;code&gt;Reconciled: True&lt;/code&gt; and &lt;code&gt;Available: True&lt;/code&gt;. All pods should be &lt;code&gt;Running&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;To uninstall (order matters - artifacts first so the sidecar can process finalizer cleanup):&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#080;font-style:italic"&gt;# 1. Artifacts first&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;kubectl delete configs,rulesfiles,plugins --all -n falco
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#080;font-style:italic"&gt;# 2. Instances and components&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;kubectl delete components,falcos --all -n falco
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#080;font-style:italic"&gt;# 3. Infrastructure&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;kubectl delete statefulset falcosidekick-ui-redis -n falco
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;kubectl delete svc falcosidekick-ui-redis -n falco
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#080;font-style:italic"&gt;# 4. Namespace&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;kubectl delete namespace falco
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;blockquote&gt;
&lt;p&gt;To configure Falcosidekick outputs (Slack, Elasticsearch, S3, etc.), see the &lt;a href="https://github.com/falcosecurity/falcosidekick#outputs"&gt;Falcosidekick documentation&lt;/a&gt;.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;div class="card card-sm pageinfo pageinfo-info my-4"&gt;
&lt;div class="card-body"&gt;
&lt;div class="card-text"&gt;
&lt;p&gt;If you prefer to deploy components individually and customize each one, follow the step-by-step quickstart below.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id="step-by-step-quickstart"&gt;Step-by-Step Quickstart&lt;/h2&gt;
&lt;h3 id="deploy-falco"&gt;Deploy Falco&lt;/h3&gt;
&lt;p&gt;Create a Falco instance with default settings (DaemonSet mode, &lt;code&gt;modern_ebpf&lt;/code&gt; driver):&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;cat &lt;span style="color:#b44"&gt;&amp;lt;&amp;lt;EOF | kubectl apply -f -
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#b44"&gt;apiVersion: instance.falcosecurity.dev/v1alpha1
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#b44"&gt;kind: Falco
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#b44"&gt;metadata:
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#b44"&gt; name: falco
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#b44"&gt;spec: {}
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#b44"&gt;EOF&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Check that Falco pods are running on your nodes:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;kubectl get falco
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;kubectl get pods -l app.kubernetes.io/name&lt;span style="color:#666"&gt;=&lt;/span&gt;falco
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="card card-sm pageinfo pageinfo-info my-4"&gt;
&lt;div class="card-body"&gt;
&lt;div class="card-text"&gt;
&lt;p&gt;Falco starts in idle mode until you provide detection rules. The next steps add the container plugin and rules to activate monitoring.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id="add-the-container-plugin"&gt;Add the Container Plugin&lt;/h3&gt;
&lt;div class="card card-sm pageinfo pageinfo-warning my-4"&gt;
&lt;div class="card-body"&gt;
&lt;div class="card-text"&gt;
&lt;p&gt;The official Falco rules use fields like &lt;code&gt;container.id&lt;/code&gt; and &lt;code&gt;container.image.repository&lt;/code&gt; that require the &lt;a href="https://github.com/falcosecurity/plugins/tree/main/plugins/container"&gt;container plugin&lt;/a&gt;. Without it, rules referencing container metadata fields will not work. Always load the container plugin &lt;strong&gt;before&lt;/strong&gt; adding rules.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;cat &lt;span style="color:#b44"&gt;&amp;lt;&amp;lt;EOF | kubectl apply -f -
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#b44"&gt;apiVersion: artifact.falcosecurity.dev/v1alpha1
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#b44"&gt;kind: Plugin
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#b44"&gt;metadata:
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#b44"&gt; name: container
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#b44"&gt;spec:
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#b44"&gt; ociArtifact:
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#b44"&gt; image:
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#b44"&gt; repository: falcosecurity/plugins/plugin/container
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#b44"&gt; tag: latest
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#b44"&gt; registry:
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#b44"&gt; name: ghcr.io
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#b44"&gt;EOF&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="add-detection-rules"&gt;Add Detection Rules&lt;/h3&gt;
&lt;p&gt;Load the official Falco rules from the OCI registry:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;cat &lt;span style="color:#b44"&gt;&amp;lt;&amp;lt;EOF | kubectl apply -f -
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#b44"&gt;apiVersion: artifact.falcosecurity.dev/v1alpha1
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#b44"&gt;kind: Rulesfile
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#b44"&gt;metadata:
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#b44"&gt; name: falco-rules
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#b44"&gt;spec:
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#b44"&gt; ociArtifact:
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#b44"&gt; image:
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#b44"&gt; repository: falcosecurity/rules/falco-rules
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#b44"&gt; tag: latest
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#b44"&gt; registry:
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#b44"&gt; name: ghcr.io
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#b44"&gt; priority: 50
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#b44"&gt;EOF&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Check the rulesfile status:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;kubectl get rulesfiles
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Falco will automatically pick up the rules and start monitoring.&lt;/p&gt;
&lt;div class="card card-sm pageinfo pageinfo-info my-4"&gt;
&lt;div class="card-body"&gt;
&lt;div class="card-text"&gt;
&lt;p&gt;The &lt;code&gt;registry.name&lt;/code&gt; field defaults to &lt;code&gt;ghcr.io&lt;/code&gt; when omitted. The &lt;code&gt;image.tag&lt;/code&gt; field defaults to &lt;code&gt;latest&lt;/code&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Rules can also come from inline YAML or Kubernetes ConfigMaps. See the &lt;a href="https://github.com/falcosecurity/falco-operator/blob/main/docs/crds/rulesfile.md"&gt;Rulesfile CRD reference&lt;/a&gt; for all options.&lt;/p&gt;
&lt;h3 id="add-other-plugins"&gt;Add Other Plugins&lt;/h3&gt;
&lt;p&gt;Load additional plugins from OCI registries. For example, the k8saudit plugin for Kubernetes audit log monitoring:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;cat &lt;span style="color:#b44"&gt;&amp;lt;&amp;lt;EOF | kubectl apply -f -
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#b44"&gt;apiVersion: artifact.falcosecurity.dev/v1alpha1
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#b44"&gt;kind: Plugin
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#b44"&gt;metadata:
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#b44"&gt; name: k8saudit
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#b44"&gt;spec:
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#b44"&gt; ociArtifact:
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#b44"&gt; image:
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#b44"&gt; repository: falcosecurity/plugins/plugin/k8saudit
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#b44"&gt; tag: latest
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#b44"&gt; registry:
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#b44"&gt; name: ghcr.io
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#b44"&gt;EOF&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;See the &lt;a href="https://github.com/falcosecurity/falco-operator/blob/main/docs/crds/plugin.md"&gt;Plugin CRD reference&lt;/a&gt; for configuration options.&lt;/p&gt;
&lt;h3 id="add-ecosystem-components"&gt;Add Ecosystem Components&lt;/h3&gt;
&lt;p&gt;The operator can deploy ecosystem components alongside Falco using the &lt;code&gt;Component&lt;/code&gt; CRD.&lt;/p&gt;
&lt;h4 id="falcosidekick"&gt;Falcosidekick&lt;/h4&gt;
&lt;p&gt;Deploy &lt;a href="https://github.com/falcosecurity/falcosidekick"&gt;Falcosidekick&lt;/a&gt; to route Falco events to 70+ integrations:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;cat &lt;span style="color:#b44"&gt;&amp;lt;&amp;lt;EOF | kubectl apply -f -
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#b44"&gt;apiVersion: instance.falcosecurity.dev/v1alpha1
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#b44"&gt;kind: Component
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#b44"&gt;metadata:
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#b44"&gt; name: sidekick
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#b44"&gt;spec:
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#b44"&gt; component:
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#b44"&gt; type: falcosidekick
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#b44"&gt; replicas: 2
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#b44"&gt;EOF&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Then configure Falco to send events to Falcosidekick:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;cat &lt;span style="color:#b44"&gt;&amp;lt;&amp;lt;EOF | kubectl apply -f -
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#b44"&gt;apiVersion: artifact.falcosecurity.dev/v1alpha1
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#b44"&gt;kind: Config
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#b44"&gt;metadata:
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#b44"&gt; name: sidekick-output
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#b44"&gt;spec:
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#b44"&gt; config:
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#b44"&gt; json_output: true
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#b44"&gt; http_output:
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#b44"&gt; enabled: true
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#b44"&gt; url: &amp;#34;http://sidekick:2801&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#b44"&gt; priority: 60
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#b44"&gt;EOF&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h4 id="falcosidekick-ui"&gt;Falcosidekick UI&lt;/h4&gt;
&lt;p&gt;Deploy the web dashboard for event visualization. Requires a Redis instance:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;cat &lt;span style="color:#b44"&gt;&amp;lt;&amp;lt;EOF | kubectl apply -f -
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#b44"&gt;apiVersion: instance.falcosecurity.dev/v1alpha1
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#b44"&gt;kind: Component
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#b44"&gt;metadata:
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#b44"&gt; name: sidekick-ui
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#b44"&gt;spec:
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#b44"&gt; component:
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#b44"&gt; type: falcosidekick-ui
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#b44"&gt; replicas: 2
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#b44"&gt;EOF&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="card card-sm pageinfo pageinfo-warning my-4"&gt;
&lt;div class="card-body"&gt;
&lt;div class="card-text"&gt;
&lt;p&gt;Falcosidekick UI requires an external Redis instance. If Redis is not available, pods will stay in &lt;code&gt;Init:0/1&lt;/code&gt; state until Redis becomes reachable. See the &lt;a href="https://github.com/falcosecurity/falco-operator/blob/main/docs/crds/component.md#falcosidekick-ui-with-redis"&gt;Component CRD reference&lt;/a&gt; for a complete example with a bundled Redis StatefulSet.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h4 id="k8s-metacollector"&gt;k8s-metacollector&lt;/h4&gt;
&lt;p&gt;Deploy the centralized Kubernetes metadata collector:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;cat &lt;span style="color:#b44"&gt;&amp;lt;&amp;lt;EOF | kubectl apply -f -
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#b44"&gt;apiVersion: instance.falcosecurity.dev/v1alpha1
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#b44"&gt;kind: Component
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#b44"&gt;metadata:
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#b44"&gt; name: metacollector
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#b44"&gt;spec:
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#b44"&gt; component:
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#b44"&gt; type: metacollector
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#b44"&gt; replicas: 1
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#b44"&gt;EOF&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="customize-configuration"&gt;Customize Configuration&lt;/h3&gt;
&lt;p&gt;Override Falco configuration with Config resources:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;cat &lt;span style="color:#b44"&gt;&amp;lt;&amp;lt;EOF | kubectl apply -f -
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#b44"&gt;apiVersion: artifact.falcosecurity.dev/v1alpha1
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#b44"&gt;kind: Config
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#b44"&gt;metadata:
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#b44"&gt; name: custom-config
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#b44"&gt;spec:
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#b44"&gt; config:
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#b44"&gt; engine:
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#b44"&gt; kind: modern_ebpf
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#b44"&gt; modern_ebpf:
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#b44"&gt; buf_size_preset: 4
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#b44"&gt; output_timeout: 2000
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#b44"&gt; priority: 50
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#b44"&gt;EOF&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Configuration fragments are applied in priority order (0–99) and merged with the base configuration. You can target specific nodes using label selectors. See the &lt;a href="https://github.com/falcosecurity/falco-operator/blob/main/docs/crds/config.md"&gt;Config CRD reference&lt;/a&gt;.&lt;/p&gt;
&lt;h3 id="deployment-modes"&gt;Deployment Modes&lt;/h3&gt;
&lt;p&gt;The operator supports two deployment modes:&lt;/p&gt;
&lt;h4 id="daemonset-default"&gt;DaemonSet (default)&lt;/h4&gt;
&lt;p&gt;Runs Falco on every node for cluster-wide syscall monitoring using the &lt;code&gt;modern_ebpf&lt;/code&gt; driver. This is the standard deployment for runtime security.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;spec&lt;/span&gt;:&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;type&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;DaemonSet&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h4 id="deployment"&gt;Deployment&lt;/h4&gt;
&lt;p&gt;Runs Falco as a regular Deployment instead of a DaemonSet.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;spec&lt;/span&gt;:&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;type&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;Deployment&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;replicas&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#666"&gt;2&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="uninstall"&gt;Uninstall&lt;/h2&gt;
&lt;p&gt;Remove resources in the correct order, artifacts first (so the sidecar can clean up finalizers), then instances, then the operator:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#080;font-style:italic"&gt;# 1. Remove artifact resources first&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;kubectl delete rulesfiles --all --all-namespaces
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;kubectl delete plugins --all --all-namespaces
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;kubectl delete configs --all --all-namespaces
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#080;font-style:italic"&gt;# 2. Remove instance resources&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;kubectl delete components --all --all-namespaces
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;kubectl delete falco --all --all-namespaces
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#080;font-style:italic"&gt;# 3. Remove the operator and CRDs&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;kubectl delete -f https://github.com/falcosecurity/falco-operator/releases/latest/download/install.yaml
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="card card-sm pageinfo pageinfo-warning my-4"&gt;
&lt;div class="card-body"&gt;
&lt;div class="card-text"&gt;
&lt;p&gt;Deleting Falco instances before artifacts will terminate the Artifact Operator sidecar, leaving artifact finalizers unresolved. Always delete artifact resources (&lt;code&gt;Rulesfile&lt;/code&gt;, &lt;code&gt;Plugin&lt;/code&gt;, &lt;code&gt;Config&lt;/code&gt;) before Falco instances.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id="learn-more"&gt;Learn More&lt;/h2&gt;
&lt;p&gt;For complete documentation, including the CRD reference, architecture overview, migration guide, and contributing instructions, visit the &lt;a href="https://github.com/falcosecurity/falco-operator"&gt;Falco Operator repository&lt;/a&gt;.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Resource&lt;/th&gt;
&lt;th&gt;Link&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Full documentation&lt;/td&gt;
&lt;td&gt;&lt;a href="https://github.com/falcosecurity/falco-operator/blob/main/docs/README.md"&gt;github.com/falcosecurity/falco-operator/docs&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;CRD reference&lt;/td&gt;
&lt;td&gt;&lt;a href="https://github.com/falcosecurity/falco-operator/blob/main/docs/crds/falco.md"&gt;Falco&lt;/a&gt;, &lt;a href="https://github.com/falcosecurity/falco-operator/blob/main/docs/crds/rulesfile.md"&gt;Rulesfile&lt;/a&gt;, &lt;a href="https://github.com/falcosecurity/falco-operator/blob/main/docs/crds/plugin.md"&gt;Plugin&lt;/a&gt;, &lt;a href="https://github.com/falcosecurity/falco-operator/blob/main/docs/crds/config.md"&gt;Config&lt;/a&gt;, &lt;a href="https://github.com/falcosecurity/falco-operator/blob/main/docs/crds/component.md"&gt;Component&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Architecture&lt;/td&gt;
&lt;td&gt;&lt;a href="https://github.com/falcosecurity/falco-operator/blob/main/docs/architecture.md"&gt;Architecture overview&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Sample manifests&lt;/td&gt;
&lt;td&gt;&lt;a href="https://github.com/falcosecurity/falco-operator/tree/main/config/samples"&gt;config/samples/&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;</description></item><item><title>Docs: Plugins Architecture Concepts</title><link>https://v0-43--falcosecurity.netlify.app/docs/concepts/plugins/architecture/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://v0-43--falcosecurity.netlify.app/docs/concepts/plugins/architecture/</guid><description>
&lt;h2 id="overview"&gt;Overview&lt;/h2&gt;
&lt;p&gt;Plugins are dynamic shared libraries (.so files in Unix, .dll files in Windows) that export C calling convention functions. Programs like Falco dynamically load these libraries and call the exported functions to extend Falco's support for event sources/fields.&lt;/p&gt;
&lt;p&gt;Plugins are versioned using semantic versioning to minimize regressions and compatibility issues.&lt;/p&gt;
&lt;p&gt;Plugins can be written in any language, as long as they export the required functions. Go, however, is the preferred language to write plugins, followed by C/C++.&lt;/p&gt;
&lt;p&gt;Plugins can implement one or more capabilities. In the scope of plugins, a &lt;em&gt;capability&lt;/em&gt; is an extension of Falco's features in the form of a specific set of C function symbols exported by shared libraries. Currently, there are four plugin capabilities supported by the framework: &lt;em&gt;event sourcing&lt;/em&gt;, &lt;em&gt;field extraction&lt;/em&gt;, &lt;em&gt;event parsing&lt;/em&gt; and &lt;em&gt;async event&lt;/em&gt;&lt;/p&gt;
&lt;h3 id="plugins-are-coresident-with-falco"&gt;Plugins are Coresident with Falco&lt;/h3&gt;
&lt;p&gt;The libraries will do everything possible to validate the data coming from the plugins and protect Falco and the other consumers from corrupted data. However, for performance reasons, plugins are &lt;em&gt;&amp;quot;trusted&amp;quot;&lt;/em&gt;: they run in the same thread and address space as Falco and they could crash the program. We assume that the user will be in control of plugin loading and will make sure only trusted plugins are loaded/packaged with Falco.&lt;/p&gt;
&lt;h3 id="plugin-sdks"&gt;Plugin SDKs&lt;/h3&gt;
&lt;p&gt;To make it easier to write plugins, there are &lt;a href="https://github.com/falcosecurity/plugin-sdk-go"&gt;Go&lt;/a&gt;, &lt;a href="https://github.com/falcosecurity/plugin-sdk-cpp"&gt;C++&lt;/a&gt;, and &lt;a href="https://github.com/falcosecurity/plugin-sdk-rs"&gt;Rust&lt;/a&gt; SDKs that handle the details of memory management and type conversion. These SDKs provide a streamlined way to implement plugins without having to deal with all the details of the lower-level functions that make up the Plugin API.&lt;/p&gt;
&lt;p&gt;These SDKs are optional, but using them is highly recommended.&lt;/p&gt;
&lt;h3 id="event-sourcing-capability"&gt;Event Sourcing Capability&lt;/h3&gt;
&lt;p&gt;Plugins with &lt;a href="https://v0-43--falcosecurity.netlify.app/docs/reference/plugins/plugin-api-reference/#event-sourcing-capability-api"&gt;event sourcing capability&lt;/a&gt; provide a new event source and make it available to libscap and libsinsp. They have the ability to &amp;quot;open&amp;quot; and &amp;quot;close&amp;quot; a stream of events and return those events to the plugin framework. They also provide a plugin ID, which is globally unique and is used in capture files (see below). Event sources provided by plugins with this capability are tied to the events they generate and can be used by plugins with field extraction capabilities and within Falco rules (see below).&lt;/p&gt;
&lt;h3 id="field-extraction-capability"&gt;Field Extraction Capability&lt;/h3&gt;
&lt;p&gt;Plugins with &lt;a href="https://v0-43--falcosecurity.netlify.app/docs/reference/plugins/plugin-api-reference/#field-extraction-capability-api"&gt;field extraction capability&lt;/a&gt; have the ability to extract information from events based on fields. For example, a field (e.g. &lt;code&gt;proc.name&lt;/code&gt;) extracts a value (e.g. process name like &lt;code&gt;nginx&lt;/code&gt;) from a syscall event. The plugin returns a set of supported fields, and there are functions to extract a value given an event and field. The plugin framework can then build filtering expressions (e.g. rule conditions) based on these fields combined with relational and/or logical operators. For example, given the expression &lt;code&gt;ct.name=root and ct.region=us-east-1&lt;/code&gt;, the plugin framework handles parsing the expression, calling the plugin to extract values for fields &lt;code&gt;ct.name&lt;/code&gt;/&lt;code&gt;ct.region&lt;/code&gt; for a given event, and determining the result of the expression. In a Falco output string like &lt;code&gt;An EC2 Node was created (name=%ct.name region=%ct.region)&lt;/code&gt;, the plugin framework handles parsing the output string, calling the plugin to extract values for fields, and building the resolved string, replacing the template field names (e.g. &lt;code&gt;%ct.region&lt;/code&gt;) with values (e.g. &lt;code&gt;us-east-1&lt;/code&gt;).&lt;/p&gt;
&lt;p&gt;Plugins with this capability only focus on field extraction from events generated by other plugins or by the core libraries. They do &lt;strong&gt;not&lt;/strong&gt; provide an event source but can extract fields from other event sources. The supported field extraction can be generic or be tied to a specific event source. An example is json field extraction, where a plugin might be able to extract fields from generic json payloads.&lt;/p&gt;
&lt;h3 id="event-parsing-capability"&gt;Event Parsing Capability&lt;/h3&gt;
&lt;p&gt;Plugins with &lt;a href="https://v0-43--falcosecurity.netlify.app/docs/reference/plugins/plugin-api-reference/#event-parsing-capability-api"&gt;event parsing capability&lt;/a&gt; can hook into an event stream and receive all of its events sequentially. The parsing phase is the stage in the event processing loop in which the Falcosecurity libraries inspect the content of the events' payload and use it to apply internal state updates or implement additional logic. This phase happens before any field extraction for a given event. Each event in a given stream is guaranteed to be received at most once.&lt;/p&gt;
&lt;h3 id="async-events-capability"&gt;Async Events Capability&lt;/h3&gt;
&lt;p&gt;Plugins with &lt;a href="https://v0-43--falcosecurity.netlify.app/docs/reference/plugins/plugin-api-reference/#async-events-capability-api"&gt;async events capability&lt;/a&gt; can enrich an event stream from a given source (not necessarily implemented by itself) by injecting events asynchronously in the stream. Such a feature can be used for implementing notification systems or recording state transitions in the event-driven model of the Falcosecurity libraries, so that they can be available to other components at runtime or when the event stream is replayed through a capture file.&lt;/p&gt;
&lt;p&gt;For example, the Falcosecurity libraries leverage this feature internally to implement metadata enrichment systems such as the one relative to container runtimes. In that case, the libraries implement asynchronous jobs responsible of retrieving such information externally outside of the main event processing loop so that it's non-blocking. The worker jobs produce a notification event every time a new container is detected and inject it asynchronously in the system event stream to be later processed for state updates and for evaluating Falco rules.&lt;/p&gt;
&lt;h3 id="composability-of-capabilities"&gt;Composability of Capabilities&lt;/h3&gt;
&lt;p&gt;Plugin capabilities are &lt;em&gt;composable&lt;/em&gt;, meaning that a single plugin can implement one or more capabilities. At loading time, the framework is able to recognize which capabilities the plugin correctly implements, and uses it accordingly inside Falco and the libraries. There can be plugins implementing event sourcing only, field extraction only, or both. For example, the AWS CloudTrail plugin implements both capabilities in order to provide the framework with the &lt;code&gt;aws_cloudtrail&lt;/code&gt; event source and to allow extracting fields such as &lt;code&gt;ct.name&lt;/code&gt; from the events it produces.&lt;/p&gt;
&lt;h2 id="plugin-event-ids"&gt;Plugin Event IDs&lt;/h2&gt;
&lt;p&gt;Every plugin with event sourcing capability requires its own, unique plugin event ID to interoperate with Falco and the other plugins. This ID is used in the following ways:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The ID is saved in in-memory event objects and is used to identify the associated plugin that injected the event.&lt;/li&gt;
&lt;li&gt;The ID is saved in capture files and is used to recreate in-memory event objects when reading capture files.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The ID must be unique to ensure that events written by a given plugin will be properly associated with that plugin (and its event sources, see below).&lt;/p&gt;
&lt;p&gt;Plugin authors &lt;em&gt;must&lt;/em&gt; register the plugin with the Falcosecurity organization by creating a PR to modify the &lt;a href="https://github.com/falcosecurity/plugins/blob/master/registry.yaml"&gt;plugin registry&lt;/a&gt; with details on the new plugin. This ensures that a given ID is used by exactly one plugin.&lt;/p&gt;
&lt;h2 id="plugin-event-sources-and-interoperability"&gt;Plugin Event Sources and Interoperability&lt;/h2&gt;
&lt;p&gt;Events returned by plugins with event sourcing capability have an &lt;em&gt;event source&lt;/em&gt; that describes the event's information. This is distinct from the plugin name to allow for multiple plugin implementations to generate the same kind of events. For example, there might be plugins gke-k8saudit, eks-k8saudit, ibmcloud-k8saudit, etc. that all fetch &lt;a href="https://kubernetes.io/docs/tasks/debug-application-cluster/audit/"&gt;K8s Audit&lt;/a&gt; information. The plugins would have different names and IDs but would have the same event source &lt;code&gt;k8s_audit&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;A plugin with field extraction capability optionally provides a set of compatible event sources. When the framework receives an event with an event source in the plugin's set of event sources, fields in expressions (i.e., fields included in the rule's output field) will be extracted from events using the plugin. The set of compatible event sources can also &lt;strong&gt;be omitted&lt;/strong&gt;. In this case, &lt;em&gt;all&lt;/em&gt; events will be presented to the plugin, regardless of their source. In this case, the plugin must detect the format of arbitrary payloads and be able to return NULL/&lt;em&gt;no value&lt;/em&gt; when the payload is not supported. As such, given a specific event source such as &lt;code&gt;k8s_audit&lt;/code&gt;, there is an implicit contract to honor regarding how data is formatted in each event of that source, such that compatible plugins with field extraction capability are able to parse events of a certain source even if they are produced by different plugins.&lt;/p&gt;
&lt;p&gt;Plugin authors &lt;em&gt;should&lt;/em&gt; register the plugin with the Falcosecurity organization by creating a PR to modify the &lt;a href="https://github.com/falcosecurity/plugins/blob/master/registry.yaml"&gt;plugin registry&lt;/a&gt; file with details on the new plugin. This allows plugin authors to coordinate about event source data formats.&lt;/p&gt;
&lt;h2 id="handling-duplicate-overlapping-fields-in-plugins-libraries-core"&gt;Handling Duplicate/Overlapping Fields in Plugins/Libraries Core&lt;/h2&gt;
&lt;p&gt;At an initial glance, adding plugins introduces the possibility of tens/hundreds of new filtercheck fields that could potentially overlap/conflict. For example, what happens if a plugin defines a &lt;code&gt;proc.name&lt;/code&gt; field? However, the notion of event source makes these potential conflicts manageable.&lt;/p&gt;
&lt;p&gt;Remember that field extraction is always done in the context of an event, and each event can be mapped back to an event source. So we only need to ensure that filtercheck fields are non-overlapping for a given event source. For example, it's perfectly valid for an AWS CloudTrail plugin to define a &lt;code&gt;proc.name&lt;/code&gt; field, as the events generated by that plugin are wholly separate from syscall events. For syscall events, the AWS CloudTrail plugin is not involved and the core libraries extract the process name for the tid performing a syscall. For AWS CloudTrail events, the core libraries are not involved in field extraction. Extraction is performed by the AWS CloudTrail plugin instead.&lt;/p&gt;
&lt;p&gt;When managing plugins, we only need to ensure the following:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;That only one plugin is loaded at a time that exports a given event source. For example, the libraries can load either a gke-k8saudit plugin with event source &lt;code&gt;k8s_audit&lt;/code&gt;, or eks-k8saudit with event source &lt;code&gt;k8s_audit&lt;/code&gt;, but not both.&lt;/li&gt;
&lt;li&gt;That for a mix of plugins with event sourcing and field extraction capabilities having the same event source, that the fields are distinct. For example, a plugin event sourcing capability providing the source &lt;code&gt;k8s_audit&lt;/code&gt; can export &lt;code&gt;ka.*&lt;/code&gt; fields, and a plugin with field extractor capabilities with event source &lt;code&gt;k8s_audit&lt;/code&gt; can export a &lt;code&gt;jevt.value[/...]&lt;/code&gt; field, and the appropriate plugin will be used to extract fields from &lt;code&gt;k8s_audit&lt;/code&gt; events as fields are parsed from condition expressions/output format strings.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="plugin-api"&gt;Plugin API&lt;/h2&gt;
&lt;p&gt;Here is an overview of the functions that comprise the plugin API. This list is not extensive: the &lt;a href="https://v0-43--falcosecurity.netlify.app/docs/reference/plugins/plugin-api-reference/"&gt;plugin API reference&lt;/a&gt; has full documentation of plugin APIs for all the capabilities supported by the framework.&lt;/p&gt;
&lt;p&gt;In almost all cases, a plugin author can use the SDKs which provide a more streamlined interface. This still provides a good overview of the functionality a plugin provides.&lt;/p&gt;
&lt;h3 id="info-functions"&gt;Info Functions&lt;/h3&gt;
&lt;p&gt;A set of functions provide information about the plugin and its compatibility with the plugin framework:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;plugin_get_required_api_version&lt;/code&gt;: Return the version of the plugin API used by a plugin.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;plugin_get_name&lt;/code&gt;: Return the name of the plugin.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;plugin_get_description&lt;/code&gt;: Return a short description of the plugin.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;plugin_get_contact&lt;/code&gt;: Return a contact url/email/twitter account for the plugin authors.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;plugin_get_version&lt;/code&gt;: Return the version of the plugin itself.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;plugin_get_last_error&lt;/code&gt;: Return the error that was last generated by a plugin.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;plugin_get_id&lt;/code&gt;: Return the unique ID of the plugin (event sourcing capability only).&lt;/li&gt;
&lt;li&gt;&lt;code&gt;plugin_get_event_source&lt;/code&gt;: Return a string describing the events generated by a plugin (event sourcing capability only).&lt;/li&gt;
&lt;li&gt;&lt;code&gt;plugin_get_async_events&lt;/code&gt;: Return a list of async events produced by a plugin (event parsing capability only).&lt;/li&gt;
&lt;li&gt;&lt;code&gt;plugin_get_init_schema&lt;/code&gt;: (Optional) Return a string describing a schema for the configuration passed to &lt;code&gt;plugin_init&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;plugin_list_open_params&lt;/code&gt;: (Optional) Return a list of suggested valid parameter values for &lt;code&gt;plugin_open&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;plugin_get_extract_event_sources&lt;/code&gt;: (Optional) Return a list of all compatible event sources (field extraction capability only).&lt;/li&gt;
&lt;li&gt;&lt;code&gt;plugin_get_extract_event_types&lt;/code&gt;: (Optional) Return a list of all compatible event types (field extraction capability only).&lt;/li&gt;
&lt;li&gt;&lt;code&gt;plugin_get_parse_event_sources&lt;/code&gt;: (Optional) Return a list of all compatible event sources (event parsing capability only).&lt;/li&gt;
&lt;li&gt;&lt;code&gt;plugin_get_parse_event_types&lt;/code&gt;: (Optional) Return a list of all compatible event types (event parsing capability only).&lt;/li&gt;
&lt;li&gt;&lt;code&gt;plugin_get_async_event_sources&lt;/code&gt;: (Optional) Return a list of all compatible event sources (async events capability only).&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="instance-capture-management-functions"&gt;Instance/Capture Management Functions&lt;/h3&gt;
&lt;p&gt;Plugins have functions to initialize/destroy a plugin, as well as functions to open/close streams of events:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;plugin_init&lt;/code&gt;: Initialize the plugin and, if needed, allocate its state.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;plugin_destroy&lt;/code&gt;: Destroy the plugin and, if plugin state was allocated, free it.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;plugin_open&lt;/code&gt;: Open the source and start a stream of events (event sourcing capability only).&lt;/li&gt;
&lt;li&gt;&lt;code&gt;plugin_close&lt;/code&gt;: Close a stream of events (event sourcing capability only).&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="events-fields-related-functions"&gt;Events/Fields Related Functions&lt;/h3&gt;
&lt;p&gt;Plugins with event sourcing capability have functions to provide events to the plugin framework:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;plugin_next_batch&lt;/code&gt;: Return one or more events to the plugin framework.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;plugin_get_progress&lt;/code&gt;: (Optional) Provide feedback on how much of the event stream has been read.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;plugin_event_to_string&lt;/code&gt;: (Optional) Return a text representation of an event generated by a plugin.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Plugins with field extraction capability have functions to define the set of fields that can be used to extract information from events, to actually extract values from events, and to return printable representations of events:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;plugin_get_fields&lt;/code&gt;: Return the list of extractor fields exported by a plugin.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;plugin_extract_fields&lt;/code&gt;: Extract one or more filter field values from an event.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Other capabilities allow interacting with events for different scopes functionalities:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;plugin_parse_event&lt;/code&gt;: Parses an event at most once before the extraction phase, and can perform state updates.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;plugin_set_async_event_handler&lt;/code&gt;: Registers a callback that can be used to inject asynchronous events in an open event stream.&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>Docs: Basic Elements of Falco Rules</title><link>https://v0-43--falcosecurity.netlify.app/docs/concepts/rules/basic-elements/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://v0-43--falcosecurity.netlify.app/docs/concepts/rules/basic-elements/</guid><description>
&lt;h2 id="rules"&gt;Rules&lt;/h2&gt;
&lt;p&gt;A rule is a YAML object, part of the rules file, whose definition contains at least the following fields:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;- &lt;span style="color:#008000;font-weight:bold"&gt;rule&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;shell_in_container&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;desc&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;notice shell activity within a container&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;condition&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;&amp;gt;&lt;span style="color:#b44;font-style:italic"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#b44;font-style:italic"&gt; (evt.type in (execve, execveat)) and
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#b44;font-style:italic"&gt; container.id != host and
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#b44;font-style:italic"&gt; (proc.name = bash or
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#b44;font-style:italic"&gt; proc.name = ksh)&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;output&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;&amp;gt;&lt;span style="color:#b44;font-style:italic"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#b44;font-style:italic"&gt; shell in a container |
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#b44;font-style:italic"&gt; user=%user.name container_id=%container.id container_name=%container.name
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#b44;font-style:italic"&gt; shell=%proc.name parent=%proc.pname cmdline=%proc.cmdline&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;priority&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;WARNING&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="conditions"&gt;Conditions&lt;/h3&gt;
&lt;p&gt;The key part of a rule is the &lt;em&gt;condition&lt;/em&gt; field. A condition is a Boolean predicate expressed using the &lt;a href="https://v0-43--falcosecurity.netlify.app/docs/rules/conditions"&gt;condition syntax&lt;/a&gt;. It is possible to express conditions on &lt;a href="https://v0-43--falcosecurity.netlify.app/docs/rules/supported-events"&gt;all supported events&lt;/a&gt; using their respective &lt;a href="https://v0-43--falcosecurity.netlify.app/docs/rules/supported-fields"&gt;supported fields&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Here's an example of a condition that alerts whenever a bash shell is run inside a container:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;container.id != host and proc.name = bash
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;The first clause checks that the event happened in a container (where &lt;code&gt;container.id&lt;/code&gt; is not equal to &lt;code&gt;&amp;quot;host&amp;quot;&lt;/code&gt; as the event occurs in a container). The second clause checks that the process name is &lt;code&gt;bash&lt;/code&gt;.&lt;/p&gt;
&lt;div class="alert alert-warning" role="alert"&gt;
Since this condition does not include a clause with a system call it will only check event metadata.&lt;br&gt;
Because of that, if a bash shell does start up in a container, Falco outputs events for every syscall that is performed by that shell.
&lt;/div&gt;
&lt;p&gt;If you want to be alerted only for each successful spawn of a shell in a container, add the appropriate event types to the condition:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;(evt.type in (execve, execveat)) and container.id != host and proc.name = bash
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Therefore, a complete rule using the above condition might be:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;- &lt;span style="color:#008000;font-weight:bold"&gt;rule&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;shell_in_container&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;desc&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;notice shell activity within a container&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;condition&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;&amp;gt;&lt;span style="color:#b44;font-style:italic"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#b44;font-style:italic"&gt; (evt.type in (execve, execveat)) and
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#b44;font-style:italic"&gt; container.id != host and
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#b44;font-style:italic"&gt; proc.name = bash&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;output&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;&amp;gt;&lt;span style="color:#b44;font-style:italic"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#b44;font-style:italic"&gt; shell in a container |
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#b44;font-style:italic"&gt; user=%user.name container_id=%container.id container_name=%container.name
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#b44;font-style:italic"&gt; shell=%proc.name parent=%proc.pname cmdline=%proc.cmdline&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;priority&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;WARNING&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;div class="alert alert-primary" role="alert"&gt;
Conditions allow you to check for many aspects of each supported event.&lt;br&gt;
To learn more, see the &lt;a href="https://v0-43--falcosecurity.netlify.app/docs/rules/conditions"&gt;condition language&lt;/a&gt;.
&lt;/div&gt;
&lt;h3 id="output"&gt;Output&lt;/h3&gt;
&lt;p&gt;A rule output is a string that can use the same &lt;a href="https://v0-43--falcosecurity.netlify.app/docs/rules/supported-fields"&gt;fields&lt;/a&gt; that conditions can use prepended by &lt;code&gt;%&lt;/code&gt; to perform interpolation, akin to &lt;code&gt;printf&lt;/code&gt;. For example:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;Disallowed SSH Connection
(command=%proc.cmdline connection=%fd.name
user=%user.name user_loginuid=%user.loginuid container_id=%container.id
image=%container.image.repository)
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;could output:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;Disallowed SSH Connection
(command=sshd connection=127.0.0.1:34705-&amp;gt;10.0.0.120:22
user=root user_loginuid=-1 container_id=host
image=&amp;lt;NA&amp;gt;)
&lt;/code&gt;&lt;/pre&gt;&lt;blockquote&gt;
&lt;p&gt;Outputs are usually written in a single line.&lt;br&gt;
Modifying this output we try to present it to you in a more human-readable way.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Note that it's not necessary that all fields are set in the specific event. As you can see in the example above if the connection happens outside a container the field &lt;code&gt;%container.image.repository&lt;/code&gt; would not be set and &lt;code&gt;&amp;lt;NA&amp;gt;&lt;/code&gt; is displayed instead.&lt;/p&gt;
&lt;p&gt;Outputs can also use the &lt;a href="https://v0-43--falcosecurity.netlify.app/docs/rules/conditions/#transform-operators"&gt;transform operators&lt;/a&gt; that are used in conditions. For example:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;Disallowed SSH Connection
(command=%proc.cmdline connection=%fd.name
user=%toupper(user.name) user_loginuid=%user.loginuid container_id=%toupper(container.id)
image=%container.image.repository)
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;could output:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;Disallowed SSH Connection
(command=sshd connection=127.0.0.1:34705-&amp;gt;10.0.0.120:22
user=ROOT user_loginuid=-1 container_id=HOST
image=&amp;lt;NA&amp;gt;)
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;To learn more about how Falco processes the output and related settings, see the &lt;a href="https://v0-43--falcosecurity.netlify.app/docs/outputs/formatting/"&gt;output formatting&lt;/a&gt; page.&lt;/p&gt;
&lt;h3 id="priority"&gt;Priority&lt;/h3&gt;
&lt;div class="alert alert-warning" role="alert"&gt;
Don't let the &lt;strong&gt;&lt;code&gt;priority&lt;/code&gt;&lt;/strong&gt; field name mislead you.&lt;br&gt;
In a Falco Rule, it has nothing to do with overriding another rule or choosing the order in which rules will be triggered. The way to control the latter is achieved by changing the order the rules are defined and therefore loaded.
&lt;/div&gt;
&lt;p&gt;Every Falco rule has a priority which indicates how serious a violation of the rule is. This is similar to what we know as the &lt;strong&gt;severity&lt;/strong&gt; of a syslog message. The priority is included in the message/JSON output/etc.&lt;/p&gt;
&lt;p&gt;Here are the available priorities:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;EMERGENCY&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ALERT&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;CRITICAL&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ERROR&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;WARNING&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;NOTICE&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;INFORMATIONAL&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;DEBUG&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The general guidelines used to assign priorities to rules are the following:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;If a rule is related to writing state (i.e. filesystem, etc.), its priority is &lt;code&gt;ERROR&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;If a rule is related to an unauthorized read of state (i.e. reading sensitive files, etc.), its priority is &lt;code&gt;WARNING&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;If a rule is related to unexpected behavior (spawning an unexpected shell in a container, opening an unexpected network connection, etc.), its priority is &lt;code&gt;NOTICE&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;If a rule is related to behaving against good practices (unexpected privileged containers, containers with sensitive mounts, running interactive commands as root), its priority is &lt;code&gt;INFO&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="alert alert-warning" role="alert"&gt;
One exception is that the rule &amp;quot;Run shell untrusted&amp;quot;, which is fairly FP-prone, has a priority of &lt;code&gt;DEBUG&lt;/code&gt;.
&lt;/div&gt;
&lt;h3 id="advanced-rule-syntax"&gt;Advanced Rule Syntax&lt;/h3&gt;
&lt;p&gt;A Falco &lt;em&gt;rule&lt;/em&gt; can contain several of the following keys:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style="text-align: left"&gt;Key&lt;/th&gt;
&lt;th style="text-align: left"&gt;Required&lt;/th&gt;
&lt;th style="text-align: left"&gt;Description&lt;/th&gt;
&lt;th style="text-align: left"&gt;Default&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;rule&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;A short, unique name for the rule.&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;condition&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;A filtering expression that is applied against events to check whether they match the rule.&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;desc&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;A longer description of what the rule detects.&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;output&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;Specifies the message that should be output if a matching event occurs. See &lt;a href="https://v0-43--falcosecurity.netlify.app/docs/rules/basic-elements/#output"&gt;output&lt;/a&gt;.&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;priority&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;A case-insensitive representation of the severity of the event. Should be one of the following: &lt;code&gt;emergency&lt;/code&gt;, &lt;code&gt;alert&lt;/code&gt;, &lt;code&gt;critical&lt;/code&gt;, &lt;code&gt;error&lt;/code&gt;, &lt;code&gt;warning&lt;/code&gt;, &lt;code&gt;notice&lt;/code&gt;, &lt;code&gt;informational&lt;/code&gt;, &lt;code&gt;debug&lt;/code&gt;.&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;exceptions&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;no&lt;/td&gt;
&lt;td style="text-align: left"&gt;A set of &lt;a href="https://v0-43--falcosecurity.netlify.app/docs/rules/exceptions/"&gt;exceptions&lt;/a&gt; that cause the rule to not generate an alert.&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;enabled&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;no&lt;/td&gt;
&lt;td style="text-align: left"&gt;If set to &lt;code&gt;false&lt;/code&gt;, a rule is neither loaded nor matched against any events.&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;true&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;tags&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;no&lt;/td&gt;
&lt;td style="text-align: left"&gt;A list of tags applied to the rule (more on this &lt;a href="https://v0-43--falcosecurity.netlify.app/docs/rules/controlling-rules/#tags"&gt;here&lt;/a&gt;).&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;warn_evttypes&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;no&lt;/td&gt;
&lt;td style="text-align: left"&gt;If set to &lt;code&gt;false&lt;/code&gt;, Falco suppresses warnings related to a rule not having an event type (more on this &lt;a href="https://v0-43--falcosecurity.netlify.app/docs/rules/style-guide/#condition-syntax"&gt;here&lt;/a&gt;).&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;true&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;skip-if-unknown-filter&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;no&lt;/td&gt;
&lt;td style="text-align: left"&gt;If set to &lt;code&gt;true&lt;/code&gt;, if a rule conditions contains a filtercheck, e.g. &lt;code&gt;fd.some_new_field&lt;/code&gt;, that is not known to this version of Falco, Falco silently accepts the rule but does not execute it; if set to &lt;code&gt;false&lt;/code&gt;, Falco reports an error and exits when finding an unknown filtercheck.&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;false&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;source&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;no&lt;/td&gt;
&lt;td style="text-align: left"&gt;The event source for which this rule should be evaluated. Typical values are &lt;code&gt;syscall&lt;/code&gt;, &lt;code&gt;k8s_audit&lt;/code&gt;, or the source advertised by a source &lt;a href="https://v0-43--falcosecurity.netlify.app/docs/plugins/"&gt;plugin&lt;/a&gt;.&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;syscall&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="macros"&gt;Macros&lt;/h2&gt;
&lt;p&gt;Macros provide a way to define common sub-portions of rules in a reusable way.&lt;/p&gt;
&lt;p&gt;By looking at the condition above it looks like both &lt;code&gt;evt.type in (execve, execveat)&lt;/code&gt; and &lt;code&gt;container.id != host&lt;/code&gt; would be used by many other rules, so to make our job easier we can easily define macros for both:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;- &lt;span style="color:#008000;font-weight:bold"&gt;macro&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;container&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;condition&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;(container.id != host)&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;- &lt;span style="color:#008000;font-weight:bold"&gt;macro&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;spawned_process&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;condition&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;(evt.type in (execve, execveat))&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;With these macros defined, we can then rewrite the above rule's condition as &lt;code&gt;spawned_process and container and proc.name = bash&lt;/code&gt;.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;- &lt;span style="color:#008000;font-weight:bold"&gt;rule&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;shell_in_container&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;desc&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;notice shell activity within a container&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;condition&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;&amp;gt;&lt;span style="color:#b44;font-style:italic"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#b44;font-style:italic"&gt; spawned_process and
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#b44;font-style:italic"&gt; container and
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#b44;font-style:italic"&gt; proc.name = bash&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;output&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;&amp;gt;&lt;span style="color:#b44;font-style:italic"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#b44;font-style:italic"&gt; shell in a container |
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#b44;font-style:italic"&gt; user=%user.name container_id=%container.id container_name=%container.name
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#b44;font-style:italic"&gt; shell=%proc.name parent=%proc.pname cmdline=%proc.cmdline&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;priority&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;WARNING&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;For more examples of rules and macros, take a look the documentation on &lt;a href="https://v0-43--falcosecurity.netlify.app/docs/reference/rules/default-macros/"&gt;default macros&lt;/a&gt; and the &lt;code&gt;rules/falco_rules.yaml&lt;/code&gt; file. In fact, both the macros above are part of the default list!&lt;/p&gt;
&lt;div class="alert alert-primary" role="alert"&gt;
Macros &lt;em&gt;can&lt;/em&gt; contain other macros that had been &lt;strong&gt;previously&lt;/strong&gt; defined.
&lt;/div&gt;
&lt;h2 id="lists"&gt;Lists&lt;/h2&gt;
&lt;p&gt;&lt;em&gt;Lists&lt;/em&gt; are named collections of items that you can include in rules, macros, or even other lists.&lt;/p&gt;
&lt;div class="alert alert-warning" role="alert"&gt;
Please note that lists &lt;em&gt;cannot&lt;/em&gt; be parsed as filtering expressions.
&lt;/div&gt;
&lt;p&gt;Each list node has the following keys:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style="text-align: left"&gt;Key&lt;/th&gt;
&lt;th style="text-align: left"&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;list&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;The unique name for the list (as a slug)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;items&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;The list of values&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Here are some example lists as well as a macro that uses them:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;- &lt;span style="color:#008000;font-weight:bold"&gt;list&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;shell_binaries&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;items&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;[bash, csh, ksh, sh, tcsh, zsh, dash]&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;- &lt;span style="color:#008000;font-weight:bold"&gt;list&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;userexec_binaries&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;items&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;[sudo, su]&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;- &lt;span style="color:#008000;font-weight:bold"&gt;list&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;known_binaries&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;items&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;[shell_binaries, userexec_binaries]&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;- &lt;span style="color:#008000;font-weight:bold"&gt;macro&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;safe_procs&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;condition&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;proc.name in (known_binaries)&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;div class="alert alert-primary" role="alert"&gt;
Lists &lt;em&gt;can&lt;/em&gt; contain other lists that had been &lt;strong&gt;previously&lt;/strong&gt; defined.
&lt;/div&gt;
&lt;p&gt;Referring to a list inserts the list items in the macro, rule, or list. Therefore, our rule could become more general replacing &lt;code&gt;proc.name = bash&lt;/code&gt; with &lt;code&gt;proc.name in (shell_binaries)&lt;/code&gt;, or even better, using the already included macro &lt;code&gt;shell_procs&lt;/code&gt;:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;- &lt;span style="color:#008000;font-weight:bold"&gt;list&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;shell_binaries&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;items&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;[bash, csh, ksh, sh, tcsh, zsh, dash]&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;- &lt;span style="color:#008000;font-weight:bold"&gt;macro&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;shell_procs&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;condition&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;proc.name in (shell_binaries)&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;- &lt;span style="color:#008000;font-weight:bold"&gt;rule&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;shell_in_container&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;desc&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;notice shell activity within a container&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;condition&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;&amp;gt;&lt;span style="color:#b44;font-style:italic"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#b44;font-style:italic"&gt; spawned_process and
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#b44;font-style:italic"&gt; container and
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#b44;font-style:italic"&gt; shell_procs&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;output&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;&amp;gt;&lt;span style="color:#b44;font-style:italic"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#b44;font-style:italic"&gt; shell in a container |
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#b44;font-style:italic"&gt; user=%user.name container_id=%container.id container_name=%container.name
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#b44;font-style:italic"&gt; shell=%proc.name parent=%proc.pname cmdline=%proc.cmdline&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;priority&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;WARNING&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="visibility"&gt;Visibility&lt;/h2&gt;
&lt;p&gt;As mentioned above, &lt;a href="https://v0-43--falcosecurity.netlify.app/docs/concepts/rules/basic-elements/#lists"&gt;lists&lt;/a&gt; can reference other lists, and &lt;a href="https://v0-43--falcosecurity.netlify.app/docs/concepts/rules/basic-elements/#macros"&gt;macros&lt;/a&gt; can reference other macros. The only requirement is that to reference an object of the same kind (a list including another list, or a macro including another macro) they must have been defined previously.&lt;/p&gt;
&lt;p&gt;However, if a &lt;a href="https://v0-43--falcosecurity.netlify.app/docs/concepts/rules/basic-elements/#macros"&gt;macro&lt;/a&gt; included a &lt;a href="https://v0-43--falcosecurity.netlify.app/docs/concepts/rules/basic-elements/#lists"&gt;list&lt;/a&gt;, this list might have been defined earlier or be defined at a later stage in the rules files. The same happens with a &lt;a href="https://v0-43--falcosecurity.netlify.app/docs/concepts/rules/basic-elements/#rules"&gt;rule&lt;/a&gt; referencing a &lt;a href="https://v0-43--falcosecurity.netlify.app/docs/concepts/rules/basic-elements/#macros"&gt;macro&lt;/a&gt;. This one doesn't need to be previously defined.&lt;/p&gt;
&lt;p&gt;In other words, visibility is defined in cascade and is quite important:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;A list can only reference lists defined before it.&lt;/li&gt;
&lt;li&gt;A macro can only reference macros defined before it.&lt;/li&gt;
&lt;li&gt;A macro can reference any list.&lt;/li&gt;
&lt;li&gt;A rule can reference any macro.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The same load-order principle applies across multiple rules files. See &lt;a href="https://v0-43--falcosecurity.netlify.app/docs/concepts/rules/overriding/#overview"&gt;Overriding Rules&lt;/a&gt; for details on how the order of rules files affects appending and overriding existing lists, macros, and rules.&lt;/p&gt;</description></item><item><title>Docs: Build Falco from source</title><link>https://v0-43--falcosecurity.netlify.app/docs/developer-guide/source/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://v0-43--falcosecurity.netlify.app/docs/developer-guide/source/</guid><description>
&lt;p&gt;Welcome to the guide on how to build Falco yourself! You are very brave! Since you are already
doing all this, chances that you are willing to contribute are high! Please read our &lt;a href="https://github.com/falcosecurity/.github/blob/master/CONTRIBUTING.md"&gt;contributing guide&lt;/a&gt;.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Install the dependencies&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="card card-sm td-max-width-on-larger-screens"&gt;
&lt;div class="card-body"&gt;
&lt;ul class="nav nav-tabs" id="dependencies" role="tablist"&gt;&lt;li class="nav-item"&gt;&lt;a data-toggle="tab" class="nav-link active" href="#dependencies-0" role="tab" aria-controls="dependencies-0" aria-selected="true"&gt;CentOS / RHEL&lt;/a&gt;&lt;/li&gt;
&lt;li class="nav-item"&gt;&lt;a data-toggle="tab" class="nav-link" href="#dependencies-1" role="tab" aria-controls="dependencies-1"&gt;Debian/ Ubuntu&lt;/a&gt;&lt;/li&gt;
&lt;li class="nav-item"&gt;&lt;a data-toggle="tab" class="nav-link" href="#dependencies-2" role="tab" aria-controls="dependencies-2"&gt;Arch Linux&lt;/a&gt;&lt;/li&gt;
&lt;li class="nav-item"&gt;&lt;a data-toggle="tab" class="nav-link" href="#dependencies-3" role="tab" aria-controls="dependencies-3"&gt;Alpine&lt;/a&gt;&lt;/li&gt;
&lt;li class="nav-item"&gt;&lt;a data-toggle="tab" class="nav-link" href="#dependencies-4" role="tab" aria-controls="dependencies-4"&gt;openSUSE&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;div class="tab-content" id="dependencies"&gt;&lt;div id="dependencies-0" class="tab-pane show active" role="tabpanel" aria-labelledby="dependencies-0"&gt;
&lt;p&gt;&lt;p&gt;CentOS 8 Stream / RHEL 8&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;dnf install git gcc gcc-c++ make cmake elfutils-libelf-devel perl-IPC-Cmd
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;div id="dependencies-1" class="tab-pane" role="tabpanel" aria-labelledby="dependencies-1"&gt;
&lt;p&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;apt update &lt;span style="color:#666"&gt;&amp;amp;&amp;amp;&lt;/span&gt; apt install git cmake clang build-essential linux-tools-common linux-tools-generic libelf-dev bpftool
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;div id="dependencies-2" class="tab-pane" role="tabpanel" aria-labelledby="dependencies-2"&gt;
&lt;p&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;pacman -S git cmake make gcc wget
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;pacman -S zlib jq yaml-cpp openssl curl c-ares protobuf grpc libyaml bpf
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;You'll also need kernel headers for building and making binaries properly.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;pacman -S linux-headers
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;You can use &lt;code&gt;uname -r&lt;/code&gt; to determine the kernel version and select the appropriate header.&lt;/p&gt;
&lt;/div&gt;
&lt;div id="dependencies-3" class="tab-pane" role="tabpanel" aria-labelledby="dependencies-3"&gt;
&lt;p&gt;&lt;p&gt;Since Alpine ships with &lt;code&gt;musl&lt;/code&gt; instead of &lt;code&gt;glibc&lt;/code&gt;, to build on Alpine, we need to pass the &lt;code&gt;-DMUSL_OPTIMIZED_BUILD=On&lt;/code&gt; CMake option.&lt;/p&gt;
&lt;p&gt;If that option is used along with the &lt;code&gt;-DUSE_BUNDLED_DEPS=On&lt;/code&gt; option, then the final build will be 100% statically-linked and portable across different Linux distributions.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;apk add g++ gcc cmake make git bash perl linux-headers autoconf automake m4 libtool elfutils-dev libelf-static binutils bpftool clang
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;div id="dependencies-4" class="tab-pane" role="tabpanel" aria-labelledby="dependencies-4"&gt;
&lt;p&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;zypper -n install git gcc12 gcc12-c++ cmake make libelf-devel gawk
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;ol start="2"&gt;
&lt;li&gt;Build Falco&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="card card-sm td-max-width-on-larger-screens"&gt;
&lt;div class="card-body"&gt;
&lt;ul class="nav nav-tabs" id="build" role="tablist"&gt;&lt;li class="nav-item"&gt;&lt;a data-toggle="tab" class="nav-link active" href="#build-0" role="tab" aria-controls="build-0" aria-selected="true"&gt;CentOS / RHEL&lt;/a&gt;&lt;/li&gt;
&lt;li class="nav-item"&gt;&lt;a data-toggle="tab" class="nav-link" href="#build-1" role="tab" aria-controls="build-1"&gt;Debian/ Ubuntu&lt;/a&gt;&lt;/li&gt;
&lt;li class="nav-item"&gt;&lt;a data-toggle="tab" class="nav-link" href="#build-2" role="tab" aria-controls="build-2"&gt;Arch Linux&lt;/a&gt;&lt;/li&gt;
&lt;li class="nav-item"&gt;&lt;a data-toggle="tab" class="nav-link" href="#build-3" role="tab" aria-controls="build-3"&gt;Alpine&lt;/a&gt;&lt;/li&gt;
&lt;li class="nav-item"&gt;&lt;a data-toggle="tab" class="nav-link" href="#build-4" role="tab" aria-controls="build-4"&gt;openSUSE&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;div class="tab-content" id="build"&gt;&lt;div id="build-0" class="tab-pane show active" role="tabpanel" aria-labelledby="build-0"&gt;
&lt;p&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;git clone https://github.com/falcosecurity/falco.git
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a2f"&gt;cd&lt;/span&gt; falco
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;mkdir -p build
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a2f"&gt;cd&lt;/span&gt; build
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;cmake -DUSE_BUNDLED_DEPS&lt;span style="color:#666"&gt;=&lt;/span&gt;ON ..
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;make falco
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;More details &lt;a href="https://v0-43--falcosecurity.netlify.app/docs/developer-guide/source/#build-falco"&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;div id="build-1" class="tab-pane" role="tabpanel" aria-labelledby="build-1"&gt;
&lt;p&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;git clone https://github.com/falcosecurity/falco.git
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a2f"&gt;cd&lt;/span&gt; falco
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;mkdir -p build
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a2f"&gt;cd&lt;/span&gt; build
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;cmake -DUSE_BUNDLED_DEPS&lt;span style="color:#666"&gt;=&lt;/span&gt;On ..
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;make falco
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;More details &lt;a href="https://v0-43--falcosecurity.netlify.app/docs/developer-guide/source/#build-falco"&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;div id="build-2" class="tab-pane" role="tabpanel" aria-labelledby="build-2"&gt;
&lt;p&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;git clone https://github.com/falcosecurity/falco.git
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a2f"&gt;cd&lt;/span&gt; falco
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;mkdir -p build
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a2f"&gt;cd&lt;/span&gt; build
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;cmake ..
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;make falco
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;More details &lt;a href="https://v0-43--falcosecurity.netlify.app/docs/developer-guide/source/#build-falco"&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;div id="build-3" class="tab-pane" role="tabpanel" aria-labelledby="build-3"&gt;
&lt;p&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;git clone https://github.com/falcosecurity/falco.git
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a2f"&gt;cd&lt;/span&gt; falco
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;mkdir -p build
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a2f"&gt;cd&lt;/span&gt; build
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;cmake -DUSE_BUNDLED_DEPS&lt;span style="color:#666"&gt;=&lt;/span&gt;On -DMUSL_OPTIMIZED_BUILD&lt;span style="color:#666"&gt;=&lt;/span&gt;On ..
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;make falco
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;div id="build-4" class="tab-pane" role="tabpanel" aria-labelledby="build-4"&gt;
&lt;p&gt;&lt;p&gt;First, make sure that &lt;code&gt;gcc&lt;/code&gt; and &lt;code&gt;g++&lt;/code&gt; are version 9 or above. If you have multiple versions installed you can &lt;a href="https://v0-43--falcosecurity.netlify.app/docs/developer-guide/source/#specify-c-and-cxx-compilers"&gt;set the preferred one&lt;/a&gt;.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;git clone https://github.com/falcosecurity/falco.git
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a2f"&gt;cd&lt;/span&gt; falco
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;mkdir -p build
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a2f"&gt;cd&lt;/span&gt; build
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;cmake -DUSE_BUNDLED_DEPS&lt;span style="color:#666"&gt;=&lt;/span&gt;ON ..
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;make falco
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;More details &lt;a href="https://v0-43--falcosecurity.netlify.app/docs/developer-guide/source/#build-falco"&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;ol start="3"&gt;
&lt;li&gt;Build kernel module driver&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="card card-sm td-max-width-on-larger-screens"&gt;
&lt;div class="card-body"&gt;
&lt;ul class="nav nav-tabs" id="kernelmodule" role="tablist"&gt;&lt;li class="nav-item"&gt;&lt;a data-toggle="tab" class="nav-link active" href="#kernelmodule-0" role="tab" aria-controls="kernelmodule-0" aria-selected="true"&gt;CentOS / RHEL&lt;/a&gt;&lt;/li&gt;
&lt;li class="nav-item"&gt;&lt;a data-toggle="tab" class="nav-link" href="#kernelmodule-1" role="tab" aria-controls="kernelmodule-1"&gt;Debian/ Ubuntu&lt;/a&gt;&lt;/li&gt;
&lt;li class="nav-item"&gt;&lt;a data-toggle="tab" class="nav-link" href="#kernelmodule-2" role="tab" aria-controls="kernelmodule-2"&gt;Arch Linux&lt;/a&gt;&lt;/li&gt;
&lt;li class="nav-item"&gt;&lt;a data-toggle="tab" class="nav-link" href="#kernelmodule-3" role="tab" aria-controls="kernelmodule-3"&gt;Alpine&lt;/a&gt;&lt;/li&gt;
&lt;li class="nav-item"&gt;&lt;a data-toggle="tab" class="nav-link" href="#kernelmodule-4" role="tab" aria-controls="kernelmodule-4"&gt;openSUSE&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;div class="tab-content" id="kernelmodule"&gt;&lt;div id="kernelmodule-0" class="tab-pane show active" role="tabpanel" aria-labelledby="kernelmodule-0"&gt;
&lt;p&gt;&lt;p&gt;In the build directory:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;yum -y install kernel-devel-&lt;span style="color:#a2f;font-weight:bold"&gt;$(&lt;/span&gt;uname -r&lt;span style="color:#a2f;font-weight:bold"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;make driver
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;More details &lt;a href="https://v0-43--falcosecurity.netlify.app/docs/developer-guide/source/#build-falco"&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;div id="kernelmodule-1" class="tab-pane" role="tabpanel" aria-labelledby="kernelmodule-1"&gt;
&lt;p&gt;&lt;p&gt;Kernel headers are required to build the driver.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;apt install linux-headers-&lt;span style="color:#a2f;font-weight:bold"&gt;$(&lt;/span&gt;uname -r&lt;span style="color:#a2f;font-weight:bold"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;In the build directory:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;make driver
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;div id="kernelmodule-2" class="tab-pane" role="tabpanel" aria-labelledby="kernelmodule-2"&gt;
&lt;p&gt;&lt;p&gt;In the build directory:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;pacman -S --needed linux-headers
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;make driver
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;More details &lt;a href="https://v0-43--falcosecurity.netlify.app/docs/developer-guide/source/#build-falco"&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;div id="kernelmodule-3" class="tab-pane" role="tabpanel" aria-labelledby="kernelmodule-3"&gt;
&lt;p&gt;&lt;p&gt;NO STEP&lt;/p&gt;
&lt;/div&gt;
&lt;div id="kernelmodule-4" class="tab-pane" role="tabpanel" aria-labelledby="kernelmodule-4"&gt;
&lt;p&gt;&lt;p&gt;In the build directory:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;zypper -n install kernel-default-devel
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;make driver
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;ol start="4"&gt;
&lt;li&gt;Build eBPF driver (deprecated)&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="card card-sm td-max-width-on-larger-screens"&gt;
&lt;div class="card-body"&gt;
&lt;ul class="nav nav-tabs" id="ebpfdriver" role="tablist"&gt;&lt;li class="nav-item"&gt;&lt;a data-toggle="tab" class="nav-link active" href="#ebpfdriver-0" role="tab" aria-controls="ebpfdriver-0" aria-selected="true"&gt;CentOS / RHEL&lt;/a&gt;&lt;/li&gt;
&lt;li class="nav-item"&gt;&lt;a data-toggle="tab" class="nav-link" href="#ebpfdriver-1" role="tab" aria-controls="ebpfdriver-1"&gt;Debian/ Ubuntu&lt;/a&gt;&lt;/li&gt;
&lt;li class="nav-item"&gt;&lt;a data-toggle="tab" class="nav-link" href="#ebpfdriver-2" role="tab" aria-controls="ebpfdriver-2"&gt;Arch Linux&lt;/a&gt;&lt;/li&gt;
&lt;li class="nav-item"&gt;&lt;a data-toggle="tab" class="nav-link" href="#ebpfdriver-3" role="tab" aria-controls="ebpfdriver-3"&gt;Alpine&lt;/a&gt;&lt;/li&gt;
&lt;li class="nav-item"&gt;&lt;a data-toggle="tab" class="nav-link" href="#ebpfdriver-4" role="tab" aria-controls="ebpfdriver-4"&gt;openSUSE&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;div class="tab-content" id="ebpfdriver"&gt;&lt;div id="ebpfdriver-0" class="tab-pane show active" role="tabpanel" aria-labelledby="ebpfdriver-0"&gt;
&lt;p&gt;&lt;p&gt;If you do not want to use the kernel module driver you can, alternatively, build the eBPF driver as follows.&lt;/p&gt;
&lt;p&gt;In the build directory:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;dnf install clang llvm
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;cmake -DBUILD_BPF&lt;span style="color:#666"&gt;=&lt;/span&gt;ON ..
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;make bpf
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;div id="ebpfdriver-1" class="tab-pane" role="tabpanel" aria-labelledby="ebpfdriver-1"&gt;
&lt;p&gt;&lt;p&gt;If you do not want to use the kernel module driver you can, alternatively, build the eBPF driver as follows.&lt;/p&gt;
&lt;p&gt;In the build directory:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;apt install llvm clang
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;cmake -DBUILD_BPF&lt;span style="color:#666"&gt;=&lt;/span&gt;ON ..
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;make bpf
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;div id="ebpfdriver-2" class="tab-pane" role="tabpanel" aria-labelledby="ebpfdriver-2"&gt;
&lt;p&gt;&lt;p&gt;If you do not want to use the kernel module driver you can, alternatively, build the eBPF driver as follows.&lt;/p&gt;
&lt;p&gt;In the build directory:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;pacman -S llvm clang
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;cmake -DBUILD_BPF&lt;span style="color:#666"&gt;=&lt;/span&gt;ON ..
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;make bpf
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;div id="ebpfdriver-3" class="tab-pane" role="tabpanel" aria-labelledby="ebpfdriver-3"&gt;
&lt;p&gt;&lt;p&gt;NO STEP&lt;/p&gt;
&lt;/div&gt;
&lt;div id="ebpfdriver-4" class="tab-pane" role="tabpanel" aria-labelledby="ebpfdriver-4"&gt;
&lt;p&gt;&lt;p&gt;If you do not want to use the kernel module driver you can, alternatively, build the eBPF driver as follows.&lt;/p&gt;
&lt;p&gt;In the build directory:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;zypper -n install clang llvm
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;cmake -DBUILD_BPF&lt;span style="color:#666"&gt;=&lt;/span&gt;ON ..
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;make bpf
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id="dependencies"&gt;Dependencies&lt;/h2&gt;
&lt;p&gt;By default Falco build bundles &lt;strong&gt;most of&lt;/strong&gt; its runtime dependencies &lt;strong&gt;dynamically&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;You can notice this observing that the option &lt;code&gt;USE_BUNDLED_DEPS&lt;/code&gt; is &lt;code&gt;OFF&lt;/code&gt; by default. Which means that, whether applicable, Falco build will try to link against libraries already existing into your machine.&lt;/p&gt;
&lt;p&gt;Changing such option to &lt;code&gt;ON&lt;/code&gt; causes Falco build to bundle all the dependencies statically.&lt;/p&gt;
&lt;h2 id="build-falco"&gt;Build Falco&lt;/h2&gt;
&lt;p&gt;To build Falco, you will need to create a &lt;code&gt;build&lt;/code&gt; directory.
It's common to have the &lt;code&gt;build&lt;/code&gt; directory in the Falco working copy itself, however it can be
anywhere in your filesystem.&lt;/p&gt;
&lt;p&gt;There are &lt;strong&gt;three main steps to compile&lt;/strong&gt; Falco.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Create the build directory and enter in it&lt;/li&gt;
&lt;li&gt;Use cmake in the build directory to create the build files for Falco. &lt;code&gt;..&lt;/code&gt; was used because the source directory
is a parent of the current directory, you can also use the absolute path for the Falco source code instead&lt;/li&gt;
&lt;li&gt;Build using make&lt;/li&gt;
&lt;/ol&gt;
&lt;h4 id="build-all"&gt;Build all&lt;/h4&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;mkdir build
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a2f"&gt;cd&lt;/span&gt; build
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;cmake ..
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;make
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;You can also build only specific targets:&lt;/p&gt;
&lt;h4 id="build-falco-only"&gt;Build Falco only&lt;/h4&gt;
&lt;p&gt;Do the build folder and cmake setup, then:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;make falco
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h4 id="build-the-falco-engine-only"&gt;Build the Falco engine only&lt;/h4&gt;
&lt;p&gt;Do the build folder and cmake setup, then:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;make falco_engine
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h4 id="build-libscap-only"&gt;Build libscap only&lt;/h4&gt;
&lt;p&gt;Do the build folder and cmake setup, then:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;make scap
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h4 id="build-libsinsp-only"&gt;Build libsinsp only&lt;/h4&gt;
&lt;p&gt;Do the build folder and cmake setup, then:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;make sinsp
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h4 id="build-the-ebpf-probe-kernel-driver-only"&gt;Build the eBPF probe / kernel driver only&lt;/h4&gt;
&lt;p&gt;Do the build folder and cmake setup, then:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;make driver
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h4 id="build-results"&gt;Build results&lt;/h4&gt;
&lt;p&gt;Once Falco is built, the three interesting things that you will find in your &lt;code&gt;build&lt;/code&gt; folder are:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;userspace/falco/falco&lt;/code&gt;: the actual Falco binary&lt;/li&gt;
&lt;li&gt;&lt;code&gt;driver/src/falco.ko&lt;/code&gt;: the Falco kernel driver&lt;/li&gt;
&lt;li&gt;&lt;code&gt;driver/bpf/falco.o&lt;/code&gt;: if you built Falco with &lt;a href="https://v0-43--falcosecurity.netlify.app/docs/developer-guide/source/#enable-ebpf-support"&gt;eBPF support&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If you'd like to build a debug version, run cmake as &lt;code&gt;cmake -DCMAKE_BUILD_TYPE=Debug ..&lt;/code&gt; instead, see the &lt;a href="https://v0-43--falcosecurity.netlify.app/docs/developer-guide/source/#cmake-options"&gt;CMake Options&lt;/a&gt; section for further customizations.&lt;/p&gt;
&lt;h3 id="cmake-options"&gt;CMake Options&lt;/h3&gt;
&lt;p&gt;When doing the &lt;code&gt;cmake&lt;/code&gt; command, we can pass additional parameters to change the behavior of the build files.&lt;/p&gt;
&lt;p&gt;Here'are some examples, always assuming your &lt;code&gt;build&lt;/code&gt; folder is inside the Falco working copy.&lt;/p&gt;
&lt;h4 id="generate-verbose-makefiles"&gt;Generate verbose makefiles&lt;/h4&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;-DCMAKE_VERBOSE_MAKEFILE&lt;span style="color:#666"&gt;=&lt;/span&gt;On
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h4 id="specify-c-and-cxx-compilers"&gt;Specify C and CXX compilers&lt;/h4&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;-DCMAKE_C_COMPILER=$(which gcc) -DCMAKE_CXX_COMPILER=$(which g++)
&lt;/code&gt;&lt;/pre&gt;&lt;h4 id="enforce-bundled-dependencies"&gt;Enforce bundled dependencies&lt;/h4&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;-DUSE_BUNDLED_DEPS=True
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Read more about Falco dependencies &lt;a href="https://v0-43--falcosecurity.netlify.app/docs/developer-guide/source/#dependencies"&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;h4 id="treat-warnings-as-errors"&gt;Treat warnings as errors&lt;/h4&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;-DBUILD_WARNINGS_AS_ERRORS=True
&lt;/code&gt;&lt;/pre&gt;&lt;h4 id="specify-the-build-type"&gt;Specify the build type&lt;/h4&gt;
&lt;p&gt;Debug build type&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;-DCMAKE_BUILD_TYPE=Debug
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Release build type&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;-DCMAKE_BUILD_TYPE=Release
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Notice this variable is case-insensitive and it defaults to release.&lt;/p&gt;
&lt;h4 id="specify-the-falco-version"&gt;Specify the Falco version&lt;/h4&gt;
&lt;p&gt;Optionally the user can specify the version he wants Falco to have. Eg.,&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt; -DFALCO_VERSION=0.43.0-dirty
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;When not explicitly specifying it the build system will compute the &lt;code&gt;FALCO_VERSION&lt;/code&gt; value from the git history.&lt;/p&gt;
&lt;p&gt;In case the current git revision has a git tag, the Falco version will be equal to it (without the leading &amp;quot;v&amp;quot; character). Otherwise the Falco version will be in the form &lt;code&gt;0.&amp;lt;commit hash&amp;gt;[.dirty]&lt;/code&gt;.&lt;/p&gt;
&lt;h4 id="enable-ebpf-support"&gt;Enable eBPF support&lt;/h4&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;-DBUILD_BPF=True
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;When enabling this you will be able to make the &lt;code&gt;bpf&lt;/code&gt; target after:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;make bpf
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="load-latest-falco-kernel-module"&gt;Load latest falco kernel module&lt;/h2&gt;
&lt;p&gt;If you have a binary version of Falco installed, an older Falco kernel module may already be loaded. To ensure you are using the latest version, you should unload any existing Falco kernel module and load the locally built version.&lt;/p&gt;
&lt;p&gt;Unload any existing kernel module via:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;rmmod falco
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;To load the locally built version, assuming you are in the &lt;code&gt;build&lt;/code&gt; dir, use:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;insmod driver/falco.ko
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="run-falco"&gt;Run falco&lt;/h2&gt;
&lt;p&gt;Once Falco is built and the kernel module is loaded, assuming you are in the &lt;code&gt;build&lt;/code&gt; dir, you can run falco as:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo ./userspace/falco/falco -c ../falco.yaml -r ../rules/falco_rules.yaml
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;By default, falco logs events to standard error.&lt;/p&gt;</description></item><item><title>Docs: Output Channels</title><link>https://v0-43--falcosecurity.netlify.app/docs/concepts/outputs/channels/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://v0-43--falcosecurity.netlify.app/docs/concepts/outputs/channels/</guid><description>
&lt;h2 id="standard-output"&gt;Standard Output&lt;/h2&gt;
&lt;p&gt;When configured to send alerts via standard output, a line is printed for each alert.&lt;/p&gt;
&lt;p&gt;Here is an example:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;stdout_output&lt;/span&gt;:&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;enabled&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;true&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;pre tabindex="0"&gt;&lt;code&gt;10:20:05.408091526: Warning Sensitive file opened for reading by non-trusted program (user=root command=cat /etc/shadow file=/etc/shadow)
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Standard output is useful when using &lt;a href="https://www.fluentd.org/"&gt;Fluentd&lt;/a&gt; or &lt;a href="https://www.elastic.co/logstash/"&gt;Logstash&lt;/a&gt; to capture logs from containers. Alerts can then be stored in &lt;a href="https://www.elastic.co/elasticsearch/"&gt;Elasticsearch&lt;/a&gt;, and dashboards can be created to visualize the alerts. For more information, read &lt;a href="https://sysdig.com/blog/kubernetes-security-logging-fluentd-falco/"&gt;this blog post&lt;/a&gt;.&lt;/p&gt;
&lt;h3 id="standard-output-buffering"&gt;Standard Output buffering&lt;/h3&gt;
&lt;p&gt;If the logs are inspected by tailing container logs (e.g. &lt;code&gt;kubectl logs -f&lt;/code&gt; in Kubernetes) it might look like events can take a long time to appear, sometimes longer than 15 minutes. This is not an issue with Falco but is simply a side effect of the system output buffering.&lt;/p&gt;
&lt;p&gt;However, if realtime update of these logs is necessary it can be forced
with the &lt;code&gt;-U/--unbuffered&lt;/code&gt; command line option which will ensure the output is flushed for every event at the cost of higher CPU usage.&lt;/p&gt;
&lt;h2 id="file-output"&gt;File Output&lt;/h2&gt;
&lt;p&gt;When configured to send alerts to a file, a message is written to the file for each alert. The configuration is very similar to the &lt;a href="https://v0-43--falcosecurity.netlify.app/docs/outputs/channels/#standard-output"&gt;Standard Output&lt;/a&gt; format:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;file_output&lt;/span&gt;:&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;enabled&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;true&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;keep_alive&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;false&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;filename&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;./events.txt&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;When the field &lt;code&gt;keep_alive&lt;/code&gt; is set to &lt;code&gt;false&lt;/code&gt; (default value), for each single alert:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;the file is opened for appending&lt;/li&gt;
&lt;li&gt;the single alert is written&lt;/li&gt;
&lt;li&gt;the file is closed&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If &lt;code&gt;keep_alive&lt;/code&gt; is set to &lt;code&gt;true&lt;/code&gt;, the file is opened before the first alert, and kept open for all subsequent alerts. Output is buffered and will be flushed only on close. (This can be changed with the &lt;code&gt;--unbuffered&lt;/code&gt; command line option).&lt;/p&gt;
&lt;p&gt;Notice that, regardless &lt;code&gt;keep_alive&lt;/code&gt; settings, Falco neither rotates nor truncates the output file.
If you'd like to use a program like &lt;a href="https://github.com/logrotate/logrotate"&gt;logrotate&lt;/a&gt; to rotate the output file, an example logrotate config is available &lt;a href="https://github.com/falcosecurity/falco/blob/ffd8747ec0943db2546c3270826e1700dc4df75f/examples/logrotate/falco"&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;As of Falco &lt;code&gt;0.10.0&lt;/code&gt;, Falco will close and reopen its file output when signaled with &lt;code&gt;SIGUSR1&lt;/code&gt;. The logrotate example above depends on it.&lt;/p&gt;
&lt;h2 id="syslog-output"&gt;Syslog Output&lt;/h2&gt;
&lt;p&gt;When configured to send alerts to syslog, a syslog message is sent for each alert. The actual format depends on your syslog daemon, but here's a simple configuration example:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;syslog_output&lt;/span&gt;:&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;enabled&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;true&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;And its respective entry in the syslog service:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;Jun 7 10:20:05 ubuntu falco: Sensitive file opened for reading by non-trusted program (user=root command=cat /etc/shadow file=/etc/shadow)
&lt;/code&gt;&lt;/pre&gt;
&lt;div class="alert alert-primary" role="alert"&gt;
Syslog messages are sent with a facility of &lt;strong&gt;&lt;code&gt;LOG_USER&lt;/code&gt;&lt;/strong&gt;.&lt;br&gt;
The rule's priority is used as the priority of the syslog message.
&lt;/div&gt;
&lt;h2 id="program-output"&gt;Program Output&lt;/h2&gt;
&lt;p&gt;When configured to send alerts to a program, Falco normally starts the program for each alert and writes its contents to the program's standard input. You can only configure a single program output (e.g. route alerts to a single program) at a time.&lt;/p&gt;
&lt;p&gt;Here you can find an example of how to configure the &lt;code&gt;program_output&lt;/code&gt; inside the &lt;code&gt;falco.yaml&lt;/code&gt; file:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;program_output&lt;/span&gt;:&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;enabled&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;true&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;keep_alive&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;false&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;program&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;mail -s &amp;#34;Falco Notification&amp;#34; someone@example.com&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;If the program cannot normally accept an input from standard input, &lt;code&gt;xargs&lt;/code&gt; can be used to pass the Falco events with an argument. For example:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;program_output&lt;/span&gt;:&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;enabled&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;true&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;keep_alive&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;false&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;program&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#b44"&gt;&amp;#34;xargs -I {} aws --region ${region} sns publish --topic-arn ${falco_sns_arn} --message {}&amp;#34;&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;When &lt;code&gt;keep_alive&lt;/code&gt; is set to &lt;code&gt;false&lt;/code&gt; (default value), for each alert Falco will run the program &lt;code&gt;mail -s ...&lt;/code&gt; and write the alert to the program. The program is run via a shell, so it's possible to specify a command pipeline if you wish to add additional formatting.&lt;/p&gt;
&lt;p&gt;If &lt;code&gt;keep_alive&lt;/code&gt; is set to &lt;code&gt;true&lt;/code&gt;, before the first alert Falco will spawn the program and write the alert. The program pipe will be kept open for subsequent alerts. Output is buffered and will be flushed only on close. (This can be changed with the &lt;code&gt;--unbuffered&lt;/code&gt; command line option).&lt;/p&gt;
&lt;div class="alert alert-primary" role="alert"&gt;
&lt;h4 class="alert-heading"&gt;Controlling the program output&lt;/h4&gt;
The program spawned by Falco is in the same process group as Falco and will receive all signals that Falco receives. If you want to, say, ignore &lt;code&gt;SIGTERM&lt;/code&gt; to allow for a clean shutdown in the face of buffered outputs, you must override the signal handler yourself.
&lt;br&gt;
As of Falco &lt;code&gt;0.10.0&lt;/code&gt;, Falco will close and reopen its file output when signaled with &lt;code&gt;SIGUSR1&lt;/code&gt;.
&lt;/div&gt;
&lt;h3 id="example-1-posting-to-a-slack-incoming-webhook"&gt;Example 1: Posting to a Slack Incoming Webhook&lt;/h3&gt;
&lt;p&gt;If you'd like to send Falco notifications to a slack channel, here's the required configuration to massage the JSON output to a form required for the slack webhook endpoint:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#080;font-style:italic"&gt;# Whether to output events in json or text&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;json_output&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;true&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;…&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;program_output&lt;/span&gt;:&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;enabled&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;true&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;program&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#b44"&gt;&amp;#34;jq &amp;#39;{text: .output}&amp;#39; | curl -d @- -X POST https://hooks.slack.com/services/XXX&amp;#34;&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="example-2-sending-alerts-to-network-channel"&gt;Example 2: Sending Alerts to Network Channel&lt;/h3&gt;
&lt;p&gt;If you'd like to send a stream of alerts over a network connection, here's an example:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#080;font-style:italic"&gt;# Whether to output events in json or text&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;json_output&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;true&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;…&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;program_output&lt;/span&gt;:&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;enabled&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;true&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;keep_alive&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;true&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;program&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#b44"&gt;&amp;#34;nc host.example.com 1234&amp;#34;&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Note the use of &lt;code&gt;keep_alive: true&lt;/code&gt; to keep the network connection persistent.&lt;/p&gt;
&lt;h2 id="http-output"&gt;HTTP/HTTPS Output&lt;/h2&gt;
&lt;p&gt;If you'd like to send alerts to an HTTP(S) endpoint, you can use the &lt;code&gt;http_output&lt;/code&gt; option:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;json_output&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;true&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#00f;font-weight:bold"&gt;...&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;http_output&lt;/span&gt;:&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;enabled&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;true&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;url&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;http://some.url/some/path/&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Currently, only unencrypted HTTP endpoints and valid HTTPS endpoints are supported (i.e., invalid or self-signed certificates are not supported).&lt;/p&gt;
&lt;h2 id="json-output"&gt;JSON Output&lt;/h2&gt;
&lt;p&gt;For all output channels, you can switch to JSON output either in the configuration file or on the command line. For each alert, Falco will print a JSON object, on a single line, containing the following properties:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;time&lt;/code&gt;: the time of the alert, in ISO8601 format.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;rule&lt;/code&gt;: the rule that resulted in the alert.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;priority&lt;/code&gt;: the priority of the rule that generated the alert.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;output&lt;/code&gt;: the formatted output string for the alert.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;hostname&lt;/code&gt;: the name of the host running Falco (can be the hostname inside the container).&lt;/li&gt;
&lt;li&gt;&lt;code&gt;tags&lt;/code&gt;: the list of tags associated with the rule.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;output_fields&lt;/code&gt;: for each templated value in the output expression, the value of that field from the event that triggered the alert.&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;Notice that, besides the ones included automatically, you can also include additional fields to &lt;code&gt;output_fields&lt;/code&gt; through &lt;code&gt;append_output&lt;/code&gt; settings in the &lt;a href="https://github.com/falcosecurity/falco/blob/master/falco.yaml"&gt;configuration&lt;/a&gt;.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Here's an example:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-javascript" data-lang="javascript"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;{&lt;span style="color:#b44"&gt;&amp;#34;hostname&amp;#34;&lt;/span&gt;&lt;span style="color:#666"&gt;:&lt;/span&gt;&lt;span style="color:#b44"&gt;&amp;#34;falco-xczjd&amp;#34;&lt;/span&gt;,&lt;span style="color:#b44"&gt;&amp;#34;output&amp;#34;&lt;/span&gt;&lt;span style="color:#666"&gt;:&lt;/span&gt;&lt;span style="color:#b44"&gt;&amp;#34;13:44:05.478445995: Critical A shell was spawned in a container with an attached terminal (user=root user_loginuid=-1 k8s.ns=default k8s.pod=kubecon container=ee97d9c4186f shell=sh parent=runc cmdline=sh -c clear; (bash || ash || sh) terminal=34816 container_id=ee97d9c4186f image=docker.io/library/alpine)&amp;#34;&lt;/span&gt;,&lt;span style="color:#b44"&gt;&amp;#34;priority&amp;#34;&lt;/span&gt;&lt;span style="color:#666"&gt;:&lt;/span&gt;&lt;span style="color:#b44"&gt;&amp;#34;Critical&amp;#34;&lt;/span&gt;,&lt;span style="color:#b44"&gt;&amp;#34;rule&amp;#34;&lt;/span&gt;&lt;span style="color:#666"&gt;:&lt;/span&gt;&lt;span style="color:#b44"&gt;&amp;#34;Terminal shell in container&amp;#34;&lt;/span&gt;,&lt;span style="color:#b44"&gt;&amp;#34;source&amp;#34;&lt;/span&gt;&lt;span style="color:#666"&gt;:&lt;/span&gt;&lt;span style="color:#b44"&gt;&amp;#34;syscall&amp;#34;&lt;/span&gt;,&lt;span style="color:#b44"&gt;&amp;#34;tags&amp;#34;&lt;/span&gt;&lt;span style="color:#666"&gt;:&lt;/span&gt;[&lt;span style="color:#b44"&gt;&amp;#34;container&amp;#34;&lt;/span&gt;,&lt;span style="color:#b44"&gt;&amp;#34;mitre_execution&amp;#34;&lt;/span&gt;,&lt;span style="color:#b44"&gt;&amp;#34;shell&amp;#34;&lt;/span&gt;],&lt;span style="color:#b44"&gt;&amp;#34;time&amp;#34;&lt;/span&gt;&lt;span style="color:#666"&gt;:&lt;/span&gt;&lt;span style="color:#b44"&gt;&amp;#34;2023-05-25T13:44:05.478445995Z&amp;#34;&lt;/span&gt;, &lt;span style="color:#b44"&gt;&amp;#34;output_fields&amp;#34;&lt;/span&gt;&lt;span style="color:#666"&gt;:&lt;/span&gt; {&lt;span style="color:#b44"&gt;&amp;#34;container.id&amp;#34;&lt;/span&gt;&lt;span style="color:#666"&gt;:&lt;/span&gt;&lt;span style="color:#b44"&gt;&amp;#34;ee97d9c4186f&amp;#34;&lt;/span&gt;,&lt;span style="color:#b44"&gt;&amp;#34;container.image.repository&amp;#34;&lt;/span&gt;&lt;span style="color:#666"&gt;:&lt;/span&gt;&lt;span style="color:#b44"&gt;&amp;#34;docker.io/library/alpine&amp;#34;&lt;/span&gt;,&lt;span style="color:#b44"&gt;&amp;#34;evt.time&amp;#34;&lt;/span&gt;&lt;span style="color:#666"&gt;:&lt;/span&gt;&lt;span style="color:#666"&gt;1685022245478445995&lt;/span&gt;,&lt;span style="color:#b44"&gt;&amp;#34;k8s.ns.name&amp;#34;&lt;/span&gt;&lt;span style="color:#666"&gt;:&lt;/span&gt;&lt;span style="color:#b44"&gt;&amp;#34;default&amp;#34;&lt;/span&gt;,&lt;span style="color:#b44"&gt;&amp;#34;k8s.pod.name&amp;#34;&lt;/span&gt;&lt;span style="color:#666"&gt;:&lt;/span&gt;&lt;span style="color:#b44"&gt;&amp;#34;kubecon&amp;#34;&lt;/span&gt;,&lt;span style="color:#b44"&gt;&amp;#34;proc.cmdline&amp;#34;&lt;/span&gt;&lt;span style="color:#666"&gt;:&lt;/span&gt;&lt;span style="color:#b44"&gt;&amp;#34;sh -c clear; (bash || ash || sh)&amp;#34;&lt;/span&gt;,&lt;span style="color:#b44"&gt;&amp;#34;proc.name&amp;#34;&lt;/span&gt;&lt;span style="color:#666"&gt;:&lt;/span&gt;&lt;span style="color:#b44"&gt;&amp;#34;sh&amp;#34;&lt;/span&gt;,&lt;span style="color:#b44"&gt;&amp;#34;proc.pname&amp;#34;&lt;/span&gt;&lt;span style="color:#666"&gt;:&lt;/span&gt;&lt;span style="color:#b44"&gt;&amp;#34;runc&amp;#34;&lt;/span&gt;,&lt;span style="color:#b44"&gt;&amp;#34;proc.tty&amp;#34;&lt;/span&gt;&lt;span style="color:#666"&gt;:&lt;/span&gt;&lt;span style="color:#666"&gt;34816&lt;/span&gt;,&lt;span style="color:#b44"&gt;&amp;#34;user.loginuid&amp;#34;&lt;/span&gt;&lt;span style="color:#666"&gt;:-&lt;/span&gt;&lt;span style="color:#666"&gt;1&lt;/span&gt;,&lt;span style="color:#b44"&gt;&amp;#34;user.name&amp;#34;&lt;/span&gt;&lt;span style="color:#666"&gt;:&lt;/span&gt;&lt;span style="color:#b44"&gt;&amp;#34;root&amp;#34;&lt;/span&gt;}}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Here's the same output, pretty-printed:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-javascript" data-lang="javascript"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#b44"&gt;&amp;#34;hostname&amp;#34;&lt;/span&gt;&lt;span style="color:#666"&gt;:&lt;/span&gt; &lt;span style="color:#b44"&gt;&amp;#34;falco-xczjd&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#b44"&gt;&amp;#34;output&amp;#34;&lt;/span&gt;&lt;span style="color:#666"&gt;:&lt;/span&gt; &lt;span style="color:#b44"&gt;&amp;#34;13:44:05.478445995: Critical A shell was spawned in a container with an attached terminal (user=root user_loginuid=-1 k8s.ns=default k8s.pod=kubecon container=ee97d9c4186f shell=sh parent=runc cmdline=sh -c clear; (bash || ash || sh) terminal=34816 container_id=ee97d9c4186f image=docker.io/library/alpine)&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#b44"&gt;&amp;#34;priority&amp;#34;&lt;/span&gt;&lt;span style="color:#666"&gt;:&lt;/span&gt; &lt;span style="color:#b44"&gt;&amp;#34;Critical&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#b44"&gt;&amp;#34;rule&amp;#34;&lt;/span&gt;&lt;span style="color:#666"&gt;:&lt;/span&gt; &lt;span style="color:#b44"&gt;&amp;#34;Terminal shell in container&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#b44"&gt;&amp;#34;source&amp;#34;&lt;/span&gt;&lt;span style="color:#666"&gt;:&lt;/span&gt; &lt;span style="color:#b44"&gt;&amp;#34;syscall&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#b44"&gt;&amp;#34;tags&amp;#34;&lt;/span&gt;&lt;span style="color:#666"&gt;:&lt;/span&gt; [
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#b44"&gt;&amp;#34;container&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#b44"&gt;&amp;#34;mitre_execution&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#b44"&gt;&amp;#34;shell&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; ],
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#b44"&gt;&amp;#34;time&amp;#34;&lt;/span&gt;&lt;span style="color:#666"&gt;:&lt;/span&gt; &lt;span style="color:#b44"&gt;&amp;#34;2023-05-25T13:44:05.478445995Z&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#b44"&gt;&amp;#34;output_fields&amp;#34;&lt;/span&gt;&lt;span style="color:#666"&gt;:&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#b44"&gt;&amp;#34;container.id&amp;#34;&lt;/span&gt;&lt;span style="color:#666"&gt;:&lt;/span&gt; &lt;span style="color:#b44"&gt;&amp;#34;ee97d9c4186f&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#b44"&gt;&amp;#34;container.image.repository&amp;#34;&lt;/span&gt;&lt;span style="color:#666"&gt;:&lt;/span&gt; &lt;span style="color:#b44"&gt;&amp;#34;docker.io/library/alpine&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#b44"&gt;&amp;#34;evt.time&amp;#34;&lt;/span&gt;&lt;span style="color:#666"&gt;:&lt;/span&gt; &lt;span style="color:#666"&gt;1685022245478445995&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#b44"&gt;&amp;#34;k8s.ns.name&amp;#34;&lt;/span&gt;&lt;span style="color:#666"&gt;:&lt;/span&gt; &lt;span style="color:#b44"&gt;&amp;#34;default&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#b44"&gt;&amp;#34;k8s.pod.name&amp;#34;&lt;/span&gt;&lt;span style="color:#666"&gt;:&lt;/span&gt; &lt;span style="color:#b44"&gt;&amp;#34;kubecon&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#b44"&gt;&amp;#34;proc.cmdline&amp;#34;&lt;/span&gt;&lt;span style="color:#666"&gt;:&lt;/span&gt; &lt;span style="color:#b44"&gt;&amp;#34;sh -c clear; (bash || ash || sh)&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#b44"&gt;&amp;#34;proc.name&amp;#34;&lt;/span&gt;&lt;span style="color:#666"&gt;:&lt;/span&gt; &lt;span style="color:#b44"&gt;&amp;#34;sh&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#b44"&gt;&amp;#34;proc.pname&amp;#34;&lt;/span&gt;&lt;span style="color:#666"&gt;:&lt;/span&gt; &lt;span style="color:#b44"&gt;&amp;#34;runc&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#b44"&gt;&amp;#34;proc.tty&amp;#34;&lt;/span&gt;&lt;span style="color:#666"&gt;:&lt;/span&gt; &lt;span style="color:#666"&gt;34816&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#b44"&gt;&amp;#34;user.loginuid&amp;#34;&lt;/span&gt;&lt;span style="color:#666"&gt;:&lt;/span&gt; &lt;span style="color:#666"&gt;-&lt;/span&gt;&lt;span style="color:#666"&gt;1&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#b44"&gt;&amp;#34;user.name&amp;#34;&lt;/span&gt;&lt;span style="color:#666"&gt;:&lt;/span&gt; &lt;span style="color:#b44"&gt;&amp;#34;root&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="grpc-output"&gt;gRPC Output&lt;/h2&gt;
&lt;div class="card card-sm pageinfo pageinfo-warning my-4"&gt;
&lt;div class="card-body"&gt;
&lt;div class="card-text"&gt;
&lt;p&gt;The gRPC Output as well as the embedded gRPC server have been deprecated in Falco &lt;code&gt;0.43.0&lt;/code&gt; and will be removed in a
future release. Until removal and since Falco &lt;code&gt;0.43.0&lt;/code&gt;, using any of them will result in a warning informing the user
about the deprecation. Users are encouraged to leverage another output and/or Falcosidekick, as the usage will result
in an error after the removal.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;If you'd like to send alerts to an external program connected via gRPC API, you need to enable both the &lt;code&gt;grpc&lt;/code&gt; and &lt;code&gt;grpc_output&lt;/code&gt; options as described under the &lt;a href="https://v0-43--falcosecurity.netlify.app/docs/grpc/#configuration"&gt;gRPC Configuration section&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>Docs: Configuration</title><link>https://v0-43--falcosecurity.netlify.app/docs/developer-guide/grpc/grpc-config/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://v0-43--falcosecurity.netlify.app/docs/developer-guide/grpc/grpc-config/</guid><description>
&lt;div class="card card-sm pageinfo pageinfo-warning my-4"&gt;
&lt;div class="card-body"&gt;
&lt;div class="card-text"&gt;
&lt;p&gt;The gRPC Output as well as the embedded gRPC server have been deprecated in Falco &lt;code&gt;0.43.0&lt;/code&gt; and will be removed in a
future release. Until removal and since Falco &lt;code&gt;0.43.0&lt;/code&gt;, using any of them will result in a warning informing the user
about the deprecation. Users are encouraged to leverage another output and/or Falcosidekick, as the usage will result
in an error after the removal.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id="enabling-the-server"&gt;Enabling the Server&lt;/h2&gt;
&lt;p&gt;The Falco &lt;a class='glossary-tooltip' title='gRPC is a modern open source, high-performance Remote Procedure Call (RPC) framework.' data-toggle='tooltip' data-placement='top' href='https://v0-43--falcosecurity.netlify.app/docs/grpc/' target='_blank' aria-label='gRPC'&gt;gRPC&lt;/a&gt; server and the Falco gRPC Outputs APIs are not enabled by default.&lt;/p&gt;
&lt;p&gt;To enable them, edit the &lt;code&gt;falco.yaml&lt;/code&gt; Falco configuration file. A sample Falco configuration file is given below:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#080;font-style:italic"&gt;# Falco supports running a gRPC server with two main binding types&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#080;font-style:italic"&gt;# 1. Over the network with mandatory mutual TLS authentication (mTLS)&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#080;font-style:italic"&gt;# 2. Over a local unix socket with no authentication&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#080;font-style:italic"&gt;# By default, the gRPC server is disabled, with no enabled services (see grpc_output)&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#080;font-style:italic"&gt;# please comment/uncomment and change accordingly the options below to configure it.&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#080;font-style:italic"&gt;# Important note: if Falco has any troubles creating the gRPC server&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#080;font-style:italic"&gt;# this information will be logged, however the main Falco daemon will not be stopped.&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#080;font-style:italic"&gt;# gRPC server over network with (mandatory) mutual TLS configuration.&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#080;font-style:italic"&gt;# This gRPC server is secure by default so you need to generate certificates and update their paths here.&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#080;font-style:italic"&gt;# By default the gRPC server is off.&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#080;font-style:italic"&gt;# You can configure the address to bind and expose it.&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#080;font-style:italic"&gt;# By modifying the threadiness configuration you can fine-tune the number of threads (and context) it will use.&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;grpc&lt;/span&gt;:&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;enabled&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;true&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;bind_address&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#b44"&gt;&amp;#34;0.0.0.0:5060&amp;#34;&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;threadiness&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#666"&gt;8&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;private_key&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#b44"&gt;&amp;#34;/etc/falco/certs/server.key&amp;#34;&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;cert_chain&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#b44"&gt;&amp;#34;/etc/falco/certs/server.crt&amp;#34;&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;root_certs&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#b44"&gt;&amp;#34;/etc/falco/certs/ca.crt&amp;#34;&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;As you can see, binding to a network address requires you to generate and specify a set of TLS certificates
as shown in the next section.&lt;/p&gt;
&lt;p&gt;Alternatively, if you want something simpler, you can tell Falco to bind the gRPC server to a local unix socket,
this does not require you to generate certificates for mTLS but also comes without any authentication mechanism.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#080;font-style:italic"&gt;# gRPC server using an unix socket&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;grpc&lt;/span&gt;:&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;enabled&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;true&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;bind_address&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#b44"&gt;&amp;#34;unix:///run/falco/falco.sock&amp;#34;&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;threadiness&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#666"&gt;8&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Then, remember to enable the services you need. Otherwise, the gRPC server won't expose anything.&lt;/p&gt;
&lt;p&gt;For the outputs use:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#080;font-style:italic"&gt;# gRPC output service.&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#080;font-style:italic"&gt;# By default it is off.&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#080;font-style:italic"&gt;# By enabling this all the output events will be kept in memory until you read them with a gRPC client.&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#080;font-style:italic"&gt;# Make sure to have a consumer for them or leave this disabled.&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;grpc_output&lt;/span&gt;:&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;enabled&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;true&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="certificates"&gt;Certificates&lt;/h2&gt;
&lt;p&gt;When configured to bind to a network address, the Falco gRPC server works only with mutual TLS by design. Therefore, you have to generate the certificates and update the paths in the above configuration.&lt;/p&gt;
&lt;p&gt;The Falco authors plan to automate the certificate generation soon.&lt;/p&gt;
&lt;p&gt;In the meantime, use the following script to generate the certificates.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Note&lt;/strong&gt;: Ensure that you configure the &lt;code&gt;-passin&lt;/code&gt;, &lt;code&gt;-passout&lt;/code&gt;, and &lt;code&gt;-subj&lt;/code&gt; flags according to your settings.&lt;/p&gt;
&lt;h3 id="generate-ca"&gt;Generate CA&lt;/h3&gt;
&lt;p&gt;Run the following commands:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;$ openssl genrsa -des3 -passout pass:1234 -out ca.key &lt;span style="color:#666"&gt;4096&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;$ openssl req -new &lt;span style="color:#b62;font-weight:bold"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; -x509 &lt;span style="color:#b62;font-weight:bold"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; -days &lt;span style="color:#666"&gt;365&lt;/span&gt; &lt;span style="color:#b62;font-weight:bold"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; -key ca.key &lt;span style="color:#b62;font-weight:bold"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; -out ca.crt &lt;span style="color:#b62;font-weight:bold"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; -passin pass:1234 &lt;span style="color:#b62;font-weight:bold"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; -subj &lt;span style="color:#b44"&gt;&amp;#34;/C=SP/ST=Italy/L=Ornavasso/O=Test/OU=Test/CN=Root CA&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="generate-server-key-cert"&gt;Generate Server Key/Cert&lt;/h3&gt;
&lt;p&gt;Run the following command:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;$ openssl genrsa -des3 -passout pass:1234 -out server.key &lt;span style="color:#666"&gt;4096&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;$ openssl req -new &lt;span style="color:#b62;font-weight:bold"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; -key server.key &lt;span style="color:#b62;font-weight:bold"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; -out server.csr &lt;span style="color:#b62;font-weight:bold"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; -passin pass:1234 &lt;span style="color:#b62;font-weight:bold"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; -subj &lt;span style="color:#b44"&gt;&amp;#34;/C=SP/ST=Italy/L=Ornavasso/O=Test/OU=Server/CN=localhost&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;$ openssl x509 -req &lt;span style="color:#b62;font-weight:bold"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; -days &lt;span style="color:#666"&gt;365&lt;/span&gt; &lt;span style="color:#b62;font-weight:bold"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; -CA ca.crt &lt;span style="color:#b62;font-weight:bold"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; -CAkey ca.key &lt;span style="color:#b62;font-weight:bold"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; -in server.csr &lt;span style="color:#b62;font-weight:bold"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; -out server.crt &lt;span style="color:#b62;font-weight:bold"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; -set_serial &lt;span style="color:#666"&gt;01&lt;/span&gt; &lt;span style="color:#b62;font-weight:bold"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; -passin pass:1234
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="remove-passphrase-from-server-key"&gt;Remove passphrase from Server Key&lt;/h3&gt;
&lt;p&gt;Run the following command:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;$ openssl rsa -in server.key -out server.key -passin pass:1234
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="generate-client-key-cert"&gt;Generate Client Key/Cert&lt;/h3&gt;
&lt;p&gt;Run the following command:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;$ openssl genrsa -des3 -passout pass:1234 -out client.key &lt;span style="color:#666"&gt;4096&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;$ openssl req -new &lt;span style="color:#b62;font-weight:bold"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; -passin pass:1234 &lt;span style="color:#b62;font-weight:bold"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; -key client.key &lt;span style="color:#b62;font-weight:bold"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; -out client.csr &lt;span style="color:#b62;font-weight:bold"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; -subj &lt;span style="color:#b44"&gt;&amp;#34;/C=SP/ST=Italy/L=Ornavasso/O=Test/OU=Client/CN=localhost&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;$ openssl x509 -req &lt;span style="color:#b62;font-weight:bold"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; -days &lt;span style="color:#666"&gt;365&lt;/span&gt; &lt;span style="color:#b62;font-weight:bold"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; -CA ca.crt &lt;span style="color:#b62;font-weight:bold"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; -CAkey ca.key &lt;span style="color:#b62;font-weight:bold"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; -set_serial &lt;span style="color:#666"&gt;01&lt;/span&gt; &lt;span style="color:#b62;font-weight:bold"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; -in client.csr &lt;span style="color:#b62;font-weight:bold"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; -out client.crt &lt;span style="color:#b62;font-weight:bold"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; -passin pass:1234
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="remove-passphrase-from-client-key"&gt;Remove passphrase from Client Key&lt;/h3&gt;
&lt;p&gt;Run the following command:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;$ openssl rsa -in client.key -out client.key -passin pass:1234
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="usage"&gt;Usage&lt;/h2&gt;
&lt;p&gt;When the configuration is complete, Falco is ready to expose its gRPC server and its Outputs APIs.&lt;/p&gt;
&lt;p&gt;To do so, simply run Falco. For example:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;$ falco -c falco.yaml -r rules/falco_rules.yaml -r rules/falco_rules.local.yaml
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Refer to the &lt;a href="https://v0-43--falcosecurity.netlify.app/docs/grpc/client-go"&gt;Go client&lt;/a&gt; documentation to learn how to receive and consume Falco &lt;a href="https://v0-43--falcosecurity.netlify.app/docs/grpc/outputs"&gt;output&lt;/a&gt; events.&lt;/p&gt;</description></item><item><title>Docs: Deploy on Kubernetes with Helm</title><link>https://v0-43--falcosecurity.netlify.app/docs/setup/kubernetes/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://v0-43--falcosecurity.netlify.app/docs/setup/kubernetes/</guid><description>
&lt;div class="card card-sm pageinfo pageinfo-info my-4"&gt;
&lt;div class="card-body"&gt;
&lt;div class="card-text"&gt;
&lt;p&gt;The &lt;strong&gt;&lt;a href="https://v0-43--falcosecurity.netlify.app/docs/setup/operator/"&gt;Falco Operator&lt;/a&gt;&lt;/strong&gt; is now the recommended way to deploy Falco on Kubernetes. It provides a declarative, Kubernetes-native experience with Custom Resources for managing Falco instances, rules, plugins, and configuration. The Helm chart method described on this page remains fully supported.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="card card-sm pageinfo pageinfo-primary my-4"&gt;
&lt;div class="card-body"&gt;
&lt;div class="card-text"&gt;
&lt;p&gt;Falco consumes streams of events and evaluates them against a set of security &lt;a class='glossary-tooltip' title='Rules are conditions under which an alert should be generated.' data-toggle='tooltip' data-placement='top' href='https://v0-43--falcosecurity.netlify.app/docs/rules/basic-elements/#rules' target='_blank' aria-label='rules'&gt;rules&lt;/a&gt; to detect abnormal behavior. By default, Falco is pre-configured to consume events from the Linux Kernel. This default installation scenario will add Falco to all nodes in your cluster using a &lt;a href="https://kubernetes.io/docs/concepts/workloads/controllers/daemonset/"&gt;DaemonSet&lt;/a&gt;. This scenario requires Falco to be privileged, and depending on the kernel version installed on the node, a &lt;a class='glossary-tooltip' title='The global term for the software that sends events from the kernel.' data-toggle='tooltip' data-placement='top' href='https://v0-43--falcosecurity.netlify.app/docs/concepts/event-sources/kernel/' target='_blank' aria-label='driver'&gt;driver&lt;/a&gt; will be installed on the node.&lt;/p&gt;
&lt;p&gt;For other installation scenarios, such as consuming cloud events or other data sources using plugins, please refer to the &lt;a href="https://v0-43--falcosecurity.netlify.app/docs/concepts/plugins/"&gt;Plugins&lt;/a&gt; section.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;A well-established method to deploy Falco on a Kubernetes cluster is to use the provided Helm chart. The official Falco charts repository is hosted at:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://falcosecurity.github.io/charts"&gt;https://falcosecurity.github.io/charts&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If needed, you can consult the &lt;a href="https://helm.sh/docs/intro/install/"&gt;Installing Helm&lt;/a&gt; guide for information about how to download and install Helm. Before deploying Falco on Kubernetes, ensure you can access the targeted cluster running with Linux nodes, either x86_64 or ARM64. Also, you will need to have &lt;a href="https://kubernetes.io/docs/tasks/tools/"&gt;kubectl&lt;/a&gt; and &lt;a href="https://helm.sh/docs/intro/install/"&gt;helm&lt;/a&gt; installed and configured.&lt;/p&gt;
&lt;p&gt;Alternatively, Falco can be installed in Kubernetes without Helm by providing manifest files and deploying them to your cluster. For details, see the &lt;a href="https://github.com/falcosecurity/deploy-kubernetes/tree/main/kubernetes/falco/templates"&gt;example here&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id="install"&gt;Install&lt;/h2&gt;
&lt;p&gt;First, add the Helm repository:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;helm repo add falcosecurity https://falcosecurity.github.io/charts
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;helm repo update
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Then install Falco:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;helm install --replace falco --namespace falco --create-namespace --set &lt;span style="color:#b8860b"&gt;tty&lt;/span&gt;&lt;span style="color:#666"&gt;=&lt;/span&gt;&lt;span style="color:#a2f"&gt;true&lt;/span&gt; falcosecurity/falco
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;And check that the Falco pods are running:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;kubectl get pods -n falco
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Falco pod(s) might need a few seconds to start. Wait until they are ready:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;kubectl &lt;span style="color:#a2f"&gt;wait&lt;/span&gt; pods --for&lt;span style="color:#666"&gt;=&lt;/span&gt;&lt;span style="color:#b8860b"&gt;condition&lt;/span&gt;&lt;span style="color:#666"&gt;=&lt;/span&gt;Ready --all -n falco
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="configuration"&gt;Configuration&lt;/h2&gt;
&lt;p&gt;When deploying Falco via Helm, you will use Helm values to pass the Falco configuration. For further details, see the &lt;a href="https://github.com/falcosecurity/charts/tree/master/charts/falco#configuration"&gt;Falco Helm Chart documentation&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id="upgrade"&gt;Upgrade&lt;/h2&gt;
&lt;p&gt;If you wish to upgrade Falco to a new version, you need to find the corresponding version in the &lt;a href="https://github.com/falcosecurity/charts/blob/master/charts/falco"&gt;Falco Helm Chart repository&lt;/a&gt; (e.g., &lt;code&gt;4.8.1&lt;/code&gt; is for Falco &lt;code&gt;0.38.2&lt;/code&gt;) then run:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;helm upgrade falco -n falco --version 4.8.1
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="card card-sm pageinfo pageinfo-warning my-4"&gt;
&lt;div class="card-body"&gt;
&lt;div class="card-text"&gt;
&lt;p&gt;To avoid any possible disruption, before upgrading to a new version, consult the &lt;a href="https://github.com/falcosecurity/charts/blob/master/charts/falco/BREAKING-CHANGES.md"&gt;Falco Helm chart Breaking Changes page&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id="uninstall"&gt;Uninstall&lt;/h2&gt;
&lt;p&gt;If you wish to remove Falco from your cluster, you can simply run:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;helm uninstall falco -n falco
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description></item><item><title>Docs: How to develop a plugin</title><link>https://v0-43--falcosecurity.netlify.app/docs/developer-guide/plugins/how-to-develop/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://v0-43--falcosecurity.netlify.app/docs/developer-guide/plugins/how-to-develop/</guid><description>
&lt;h2 id="introduction"&gt;Introduction&lt;/h2&gt;
&lt;p&gt;This section explains how to develop a plugin from scratch with the official &lt;a href="https://v0-43--falcosecurity.netlify.app/docs/reference/plugins/go-sdk-walkthrough/"&gt;Go SDK&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;We'll create a plugin for the &lt;a href="https://docs.docker.com/engine/reference/commandline/events/"&gt;&lt;code&gt;docker events&lt;/code&gt;&lt;/a&gt; from a local &lt;code&gt;docker daemon&lt;/code&gt;. It is a basic example of an &lt;code&gt;event stream&lt;/code&gt; with a basic format and without specific authentication.&lt;/p&gt;
&lt;p&gt;To know more about the available feature of the Go SDK and how to see use, you can refer to this &lt;a href="https://v0-43--falcosecurity.netlify.app/docs/reference/plugins/go-sdk-walkthrough/"&gt;page&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id="awaited-result"&gt;Awaited result&lt;/h2&gt;
&lt;p&gt;At the end, your plugin will allow you to get that kind of alerts:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;2022-02-08T10:58:56.370816183+01:00 container create e327f1fa52a90d79421e416aed60e6de6872231f31101a1cc63401e90cef4bd6 (image=alpine, name=confident_kirch)
2022-02-08T10:58:56.371818906+01:00 container attach e327f1fa52a90d79421e416aed60e6de6872231f31101a1cc63401e90cef4bd6 (image=alpine, name=confident_kirch)
2022-02-08T10:58:56.482094215+01:00 network connect 5864a44bccca4e0963dfe9c3087919bf8f8e5c3aa7db33dd6d9ae7138c5ee3f3 (container=e327f1fa52a90d79421e416aed60e6de6872231f31101a1cc63401e90cef4bd6, name=bridge, type=bridge)
2022-02-08T10:58:56.804166856+01:00 container start e327f1fa52a90d79421e416aed60e6de6872231f31101a1cc63401e90cef4bd6 (image=alpine, name=confident_kirch)
2022-02-08T10:58:56.831912702+01:00 container die e327f1fa52a90d79421e416aed60e6de6872231f31101a1cc63401e90cef4bd6 (exitCode=0, image=alpine, name=confident_kirch)
2022-02-08T10:58:57.072125878+01:00 network disconnect 5864a44bccca4e0963dfe9c3087919bf8f8e5c3aa7db33dd6d9ae7138c5ee3f3 (container=e327f1fa52a90d79421e416aed60e6de6872231f31101a1cc63401e90cef4bd6, name=bridge, type=bridge)
2022-02-08T10:58:57.132390363+01:00 container destroy e327f1fa52a90d79421e416aed60e6de6872231f31101a1cc63401e90cef4bd6 (image=alpine, name=confident_kirch)
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id="the-docker-sdk"&gt;The Docker SDK&lt;/h2&gt;
&lt;p&gt;For reducing the complexity to communicate with the &lt;code&gt;docker daemon&lt;/code&gt;, we'll use the official &lt;a href="https://pkg.go.dev/github.com/docker/docker"&gt;&lt;code&gt;docker sdk&lt;/code&gt;&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id="requirements"&gt;Requirements&lt;/h2&gt;
&lt;p&gt;The only requirements for this examples are:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;a &lt;code&gt;docker daemon&lt;/code&gt; running in your local system&lt;/li&gt;
&lt;li&gt;&lt;code&gt;falco&lt;/code&gt; &amp;gt;=0.35 installed in your local system&lt;/li&gt;
&lt;li&gt;&lt;code&gt;go&lt;/code&gt; &amp;gt;= 1.19&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="code-organization"&gt;Code Organization&lt;/h2&gt;
&lt;p&gt;To simplify contributions and keep a consistency between plugins, we propose a specific organization for the repositories of plugins:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;.
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;├── LICENSE
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;├── Makefile
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;├── README.md
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;├──
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;├── go.mod
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;├── go.sum
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;├── pkg
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;│   └── docker.go
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;├── plugin
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;│   └── main.go
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;└── rules
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; └── docker_rules.yaml
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The directories:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;pkg&lt;/code&gt;: Contains all modules for our plugin, we use a &lt;code&gt;pkg&lt;/code&gt; folder because they might be imported and used by other plugins.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;plugin&lt;/code&gt;: Contains the &lt;code&gt;main.go&lt;/code&gt; of our plugin.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;rules&lt;/code&gt;: Contains one or more &lt;code&gt;.yaml&lt;/code&gt; files with default rules for the plugin.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The files:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;LICENSE&lt;/code&gt;: The license file, most of the plugins are under Apache License 2.0.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;README&lt;/code&gt;: The README, see in the &lt;a href="https://github.com/Issif/docker-plugin"&gt;repository&lt;/a&gt; for an example.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Makefile&lt;/code&gt;: Allows to easily build and install the plugin, see in the &lt;a href="https://github.com/Issif/docker-plugin/blob/main/Makefile"&gt;repository&lt;/a&gt; for an example.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;falco.yaml&lt;/code&gt;: (optional) An example file with the minimal configuration to use the plugin.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;rules/docker_rules.yaml&lt;/code&gt;: An example rule file, its name must respect &lt;code&gt;&amp;lt;plugin_name&amp;gt;_rules.yaml&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;go.mod&lt;/code&gt;, &lt;code&gt;go.sum&lt;/code&gt;: Classic go module files.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="the-plugin-codebase"&gt;The plugin codebase&lt;/h2&gt;
&lt;h3 id="plugin-main-go"&gt;plugin/main.go&lt;/h3&gt;
&lt;p&gt;This is the entrypoint of our plugin.&lt;/p&gt;
&lt;p&gt;This is where we declare the details of our plugin:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-go" data-lang="go"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;package&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;main&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;import&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;(&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;docker&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#b44"&gt;&amp;#34;github.com/Issif/docker-plugin/pkg&amp;#34;&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#b44"&gt;&amp;#34;github.com/falcosecurity/plugin-sdk-go/pkg/sdk/plugins&amp;#34;&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#b44"&gt;&amp;#34;github.com/falcosecurity/plugin-sdk-go/pkg/sdk/plugins/extractor&amp;#34;&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#b44"&gt;&amp;#34;github.com/falcosecurity/plugin-sdk-go/pkg/sdk/plugins/source&amp;#34;&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;)&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;const&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;(&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;PluginID&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#0b0;font-weight:bold"&gt;uint32&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;=&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#666"&gt;5&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;PluginName&lt;span style="color:#bbb"&gt; &lt;/span&gt;=&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#b44"&gt;&amp;#34;docker&amp;#34;&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;PluginDescription&lt;span style="color:#bbb"&gt; &lt;/span&gt;=&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#b44"&gt;&amp;#34;Docker Events&amp;#34;&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;PluginContact&lt;span style="color:#bbb"&gt; &lt;/span&gt;=&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#b44"&gt;&amp;#34;github.com/falcosecurity/plugins/&amp;#34;&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;PluginVersion&lt;span style="color:#bbb"&gt; &lt;/span&gt;=&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#b44"&gt;&amp;#34;0.2.0&amp;#34;&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;PluginEventSource&lt;span style="color:#bbb"&gt; &lt;/span&gt;=&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#b44"&gt;&amp;#34;docker&amp;#34;&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;)&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;func&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#00a000"&gt;init&lt;/span&gt;()&lt;span style="color:#bbb"&gt; &lt;/span&gt;{&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;plugins.&lt;span style="color:#00a000"&gt;SetFactory&lt;/span&gt;(&lt;span style="color:#a2f;font-weight:bold"&gt;func&lt;/span&gt;()&lt;span style="color:#bbb"&gt; &lt;/span&gt;plugins.Plugin&lt;span style="color:#bbb"&gt; &lt;/span&gt;{&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;p&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#666"&gt;:=&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#666"&gt;&amp;amp;&lt;/span&gt;docker.Plugin{}&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;p.&lt;span style="color:#00a000"&gt;SetInfo&lt;/span&gt;(&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;PluginID,&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;PluginName,&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;PluginDescription,&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;PluginContact,&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;PluginVersion,&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;PluginEventSource,&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;)&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;extractor.&lt;span style="color:#00a000"&gt;Register&lt;/span&gt;(p)&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;source.&lt;span style="color:#00a000"&gt;Register&lt;/span&gt;(p)&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;return&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;p&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;})&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;func&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#00a000"&gt;main&lt;/span&gt;()&lt;span style="color:#bbb"&gt; &lt;/span&gt;{}&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Few requirements:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;PluginID&lt;/code&gt; (Sourcing Capability Only) The ID field is mandatory and must be unique in the registry across all the plugins with event source capability&lt;/li&gt;
&lt;li&gt;&lt;code&gt;PluginName&lt;/code&gt;: The name field is mandatory and must be unique across all the plugins in the registry. The plugin name must match this regular expression: &lt;code&gt;^[a-z]+[a-z0-9-_\-]*$&lt;/code&gt; (however, its not recommended to use _ in the name, unless you are trying to match the name of a source or for particular reasons)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;PluginEventSource&lt;/code&gt;: The source (Sourcing Capability Only) and sources (Extraction Capability Only) must match this regular expression: &lt;code&gt;^[a-z]+[a-z0-9_]*$&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id="the-imports"&gt;The imports&lt;/h4&gt;
&lt;p&gt;Despite basic &lt;code&gt;Go&lt;/code&gt; modules, we'll have to import the different &lt;a href="https://github.com/falcosecurity/plugin-sdk-go/pkg/sdk"&gt;&lt;code&gt;plugin-sdk-go&lt;/code&gt;&lt;/a&gt; modules (&amp;gt;= 0.5.0) and other modules we need for our plugin:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-go" data-lang="go"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;import&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;(&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;docker&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#b44"&gt;&amp;#34;github.com/Issif/docker-plugin/pkg&amp;#34;&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#b44"&gt;&amp;#34;github.com/falcosecurity/plugin-sdk-go/pkg/sdk/plugins&amp;#34;&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#b44"&gt;&amp;#34;github.com/falcosecurity/plugin-sdk-go/pkg/sdk/plugins/extractor&amp;#34;&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#b44"&gt;&amp;#34;github.com/falcosecurity/plugin-sdk-go/pkg/sdk/plugins/source&amp;#34;&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;)&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;We'll import these different components of &lt;code&gt;plugin-sdk-go&lt;/code&gt; in almost every plugin we'll write. They're really convenient and provide a much easier way to deal with the &lt;em&gt;Falco plugin framework&lt;/em&gt;.&lt;/p&gt;
&lt;h4 id="the-const"&gt;The const&lt;/h4&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-go" data-lang="go"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;const&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;(&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;ID&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#0b0;font-weight:bold"&gt;uint32&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;=&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#666"&gt;5&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;Name&lt;span style="color:#bbb"&gt; &lt;/span&gt;=&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#b44"&gt;&amp;#34;docker&amp;#34;&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;Description&lt;span style="color:#bbb"&gt; &lt;/span&gt;=&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#b44"&gt;&amp;#34;Docker Events&amp;#34;&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;Contact&lt;span style="color:#bbb"&gt; &lt;/span&gt;=&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#b44"&gt;&amp;#34;github.com/Issif/docker-plugin&amp;#34;&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;Version&lt;span style="color:#bbb"&gt; &lt;/span&gt;=&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#b44"&gt;&amp;#34;0.2.0&amp;#34;&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;EventSource&lt;span style="color:#bbb"&gt; &lt;/span&gt;=&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#b44"&gt;&amp;#34;docker&amp;#34;&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;)&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The &lt;code&gt;const&lt;/code&gt; are used to declare all mandatory information of our plugin through the &lt;code&gt;docker.SetInfo()&lt;/code&gt; method:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;ID&lt;/code&gt;: Must be unique among all plugins, it's used by the framework in captures to know which &lt;code&gt;plugin&lt;/code&gt; is the &lt;code&gt;source&lt;/code&gt; of events. It's also important for avoiding collisions if you want to share your plugin in the &lt;a href="https://github.com/falcosecurity/plugins"&gt;registry&lt;/a&gt;, see &lt;a href="https://github.com/falcosecurity/plugins#registering-a-new-plugin"&gt;the main repository&lt;/a&gt; for more details.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Name&lt;/code&gt;: The name of our plugin, will be used in &lt;code&gt;plugins&lt;/code&gt; section of &lt;code&gt;falco.yaml&lt;/code&gt;. The plugin name must match this regular expression: &lt;code&gt;^[a-z]+[a-z0-9-_\-]*$&lt;/code&gt; (however, its not recommended to use _ in the name, unless you are trying to match the name of a source or for particular reasons).&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Description&lt;/code&gt;: The description of our plugin.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Contact&lt;/code&gt;: A contact link, often a link to the repository.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Version&lt;/code&gt;: All plugins must be versioned for compatibility with Falco, the versioning must follow the semantic versioning.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;EventSource&lt;/code&gt;: This represents the value we'll set in &lt;code&gt;Falco&lt;/code&gt; rules for mapping, in our case, all rules we'll set will have &lt;code&gt;source: docker&lt;/code&gt;. The source must match this regular expression: &lt;code&gt;^[a-z]+[a-z0-9_]*$&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id="the-functions"&gt;The functions&lt;/h4&gt;
&lt;h5 id="main"&gt;&lt;code&gt;main()&lt;/code&gt;&lt;/h5&gt;
&lt;p&gt;The &lt;code&gt;main()&lt;/code&gt; function is mandatory for any &lt;code&gt;go&lt;/code&gt; program, but because we'll build the &lt;code&gt;plugin&lt;/code&gt; as a library for the &lt;em&gt;Falco plugin framework&lt;/em&gt; which is written in &lt;code&gt;C&lt;/code&gt;, we can let it empty.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-go" data-lang="go"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#080;font-style:italic"&gt;// main is mandatory but empty, because the plugin will be used as C library by Falco plugin framework&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;func&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#00a000"&gt;main&lt;/span&gt;()&lt;span style="color:#bbb"&gt; &lt;/span&gt;{}&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h5 id="init"&gt;&lt;code&gt;init()&lt;/code&gt;&lt;/h5&gt;
&lt;p&gt;The &lt;code&gt;init()&lt;/code&gt; function is used for registering our plugin to the &lt;em&gt;Falco plugin framework&lt;/em&gt;, as a &lt;a href="https://falco.org/docs/plugins/#source-plugin"&gt;&lt;code&gt;source&lt;/code&gt;&lt;/a&gt; and an &lt;a href="https://falco.org/docs/plugins/#extractor-plugin"&gt;&lt;code&gt;extractor&lt;/code&gt;&lt;/a&gt;. We also use it to set the info of the plugin:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-go" data-lang="go"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;func&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#00a000"&gt;init&lt;/span&gt;()&lt;span style="color:#bbb"&gt; &lt;/span&gt;{&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;plugins.&lt;span style="color:#00a000"&gt;SetFactory&lt;/span&gt;(&lt;span style="color:#a2f;font-weight:bold"&gt;func&lt;/span&gt;()&lt;span style="color:#bbb"&gt; &lt;/span&gt;plugins.Plugin&lt;span style="color:#bbb"&gt; &lt;/span&gt;{&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;p&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#666"&gt;:=&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#666"&gt;&amp;amp;&lt;/span&gt;docker.Plugin{}&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;p.&lt;span style="color:#00a000"&gt;SetInfo&lt;/span&gt;(&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;ID,&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;Name,&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;Description,&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;Contact,&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;Version,&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;EventSource,&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;)&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;extractor.&lt;span style="color:#00a000"&gt;Register&lt;/span&gt;(p)&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;source.&lt;span style="color:#00a000"&gt;Register&lt;/span&gt;(p)&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;return&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;p&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;})&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The &lt;code&gt;init()&lt;/code&gt; contains also some specific functions and methods:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;plugins.SetFactory()&lt;/code&gt; is a method to register our plugin to the framework&lt;/li&gt;
&lt;li&gt;&lt;code&gt;SetInfo()&lt;/code&gt; is a method to set the details of our plugin before it's registered to the &lt;em&gt;Falco plugin framework&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;source.Register()&lt;/code&gt; allows to declare our plugin as a source to the framework, ie, a plugin to collect events from a source&lt;/li&gt;
&lt;li&gt;&lt;code&gt;extractor.Register()&lt;/code&gt; allows to declare our plugin as an extractor to the framework, ie, a plugin to extract fields from an event&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="pkg-docker-go"&gt;pkg/docker.go&lt;/h3&gt;
&lt;p&gt;The module used by our &lt;code&gt;main.go&lt;/code&gt;, it can also be imported by other plugins, especially when it's an &lt;a href="https://falco.org/docs/plugins/#field-extraction-capability"&gt;extractor&lt;/a&gt;.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-go" data-lang="go"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;package&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;docker&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;import&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;(&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#b44"&gt;&amp;#34;context&amp;#34;&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#b44"&gt;&amp;#34;encoding/json&amp;#34;&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#b44"&gt;&amp;#34;fmt&amp;#34;&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#b44"&gt;&amp;#34;io&amp;#34;&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#b44"&gt;&amp;#34;io/ioutil&amp;#34;&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#b44"&gt;&amp;#34;github.com/alecthomas/jsonschema&amp;#34;&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#b44"&gt;&amp;#34;github.com/falcosecurity/plugin-sdk-go/pkg/sdk&amp;#34;&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#b44"&gt;&amp;#34;github.com/falcosecurity/plugin-sdk-go/pkg/sdk/plugins&amp;#34;&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#b44"&gt;&amp;#34;github.com/falcosecurity/plugin-sdk-go/pkg/sdk/plugins/source&amp;#34;&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;dockerTypes&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#b44"&gt;&amp;#34;github.com/docker/docker/api/types&amp;#34;&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;dockerEvents&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#b44"&gt;&amp;#34;github.com/docker/docker/api/types/events&amp;#34;&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;docker&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#b44"&gt;&amp;#34;github.com/moby/docker/client&amp;#34;&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;)&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;var&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;(&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;ID&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#0b0;font-weight:bold"&gt;uint32&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;Name&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#0b0;font-weight:bold"&gt;string&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;Description&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#0b0;font-weight:bold"&gt;string&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;Contact&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#0b0;font-weight:bold"&gt;string&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;Version&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#0b0;font-weight:bold"&gt;string&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;EventSource&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#0b0;font-weight:bold"&gt;string&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;)&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;type&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;PluginConfig&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;struct&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;{&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;FlushInterval&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#0b0;font-weight:bold"&gt;uint64&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#b44"&gt;`json:&amp;#34;flushInterval&amp;#34; jsonschema:&amp;#34;description=Flush Interval in ms (Default: 30)&amp;#34;`&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#080;font-style:italic"&gt;// Plugin represents our plugin&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;type&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;Plugin&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;struct&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;{&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;plugins.BasePlugin&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;Config&lt;span style="color:#bbb"&gt; &lt;/span&gt;PluginConfig&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;lastDockerEventMessage&lt;span style="color:#bbb"&gt; &lt;/span&gt;dockerEvents.Message&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;lastDockerEventNum&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#0b0;font-weight:bold"&gt;uint64&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#080;font-style:italic"&gt;// setDefault is used to set default values before mapping with InitSchema()&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;func&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;(p&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#666"&gt;*&lt;/span&gt;PluginConfig)&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#00a000"&gt;setDefault&lt;/span&gt;()&lt;span style="color:#bbb"&gt; &lt;/span&gt;{&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;p.FlushInterval&lt;span style="color:#bbb"&gt; &lt;/span&gt;=&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#666"&gt;30&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#080;font-style:italic"&gt;// SetInfo is used to set the Info of the plugin&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;func&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;(p&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#666"&gt;*&lt;/span&gt;Plugin)&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#00a000"&gt;SetInfo&lt;/span&gt;(id&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#0b0;font-weight:bold"&gt;uint32&lt;/span&gt;,&lt;span style="color:#bbb"&gt; &lt;/span&gt;name,&lt;span style="color:#bbb"&gt; &lt;/span&gt;description,&lt;span style="color:#bbb"&gt; &lt;/span&gt;contact,&lt;span style="color:#bbb"&gt; &lt;/span&gt;version,&lt;span style="color:#bbb"&gt; &lt;/span&gt;eventSource&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#0b0;font-weight:bold"&gt;string&lt;/span&gt;)&lt;span style="color:#bbb"&gt; &lt;/span&gt;{&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;ID&lt;span style="color:#bbb"&gt; &lt;/span&gt;=&lt;span style="color:#bbb"&gt; &lt;/span&gt;id&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;Name&lt;span style="color:#bbb"&gt; &lt;/span&gt;=&lt;span style="color:#bbb"&gt; &lt;/span&gt;name&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;Contact&lt;span style="color:#bbb"&gt; &lt;/span&gt;=&lt;span style="color:#bbb"&gt; &lt;/span&gt;contact&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;Version&lt;span style="color:#bbb"&gt; &lt;/span&gt;=&lt;span style="color:#bbb"&gt; &lt;/span&gt;version&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;EventSource&lt;span style="color:#bbb"&gt; &lt;/span&gt;=&lt;span style="color:#bbb"&gt; &lt;/span&gt;eventSource&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#080;font-style:italic"&gt;// Info displays information of the plugin to Falco plugin framework&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;func&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;(p&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#666"&gt;*&lt;/span&gt;Plugin)&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#00a000"&gt;Info&lt;/span&gt;()&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#666"&gt;*&lt;/span&gt;plugins.Info&lt;span style="color:#bbb"&gt; &lt;/span&gt;{&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;return&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#666"&gt;&amp;amp;&lt;/span&gt;plugins.Info{&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;ID:&lt;span style="color:#bbb"&gt; &lt;/span&gt;ID,&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;Name:&lt;span style="color:#bbb"&gt; &lt;/span&gt;Name,&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;Description:&lt;span style="color:#bbb"&gt; &lt;/span&gt;Description,&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;Contact:&lt;span style="color:#bbb"&gt; &lt;/span&gt;Contact,&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;Version:&lt;span style="color:#bbb"&gt; &lt;/span&gt;Version,&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;EventSource:&lt;span style="color:#bbb"&gt; &lt;/span&gt;EventSource,&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;}&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#080;font-style:italic"&gt;// InitSchema map the configuration values with Plugin structure through JSONSchema tags&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;func&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;(p&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#666"&gt;*&lt;/span&gt;Plugin)&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#00a000"&gt;InitSchema&lt;/span&gt;()&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#666"&gt;*&lt;/span&gt;sdk.SchemaInfo&lt;span style="color:#bbb"&gt; &lt;/span&gt;{&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;reflector&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#666"&gt;:=&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;jsonschema.Reflector{&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;RequiredFromJSONSchemaTags:&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;true&lt;/span&gt;,&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#080;font-style:italic"&gt;// all properties are optional by default&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;AllowAdditionalProperties:&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;true&lt;/span&gt;,&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#080;font-style:italic"&gt;// unrecognized properties don&amp;#39;t cause a parsing failures&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;}&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;if&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;schema,&lt;span style="color:#bbb"&gt; &lt;/span&gt;err&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#666"&gt;:=&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;reflector.&lt;span style="color:#00a000"&gt;Reflect&lt;/span&gt;(&lt;span style="color:#666"&gt;&amp;amp;&lt;/span&gt;PluginConfig{}).&lt;span style="color:#00a000"&gt;MarshalJSON&lt;/span&gt;();&lt;span style="color:#bbb"&gt; &lt;/span&gt;err&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#666"&gt;==&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;nil&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;{&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;return&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#666"&gt;&amp;amp;&lt;/span&gt;sdk.SchemaInfo{&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;Schema:&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#a2f"&gt;string&lt;/span&gt;(schema),&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;}&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;}&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;return&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;nil&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#080;font-style:italic"&gt;// Init is called by the Falco plugin framework as first entry,&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#080;font-style:italic"&gt;// we use it for setting default configuration values and mapping&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#080;font-style:italic"&gt;// values from `init_config` (json format for this plugin)&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;func&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;(p&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#666"&gt;*&lt;/span&gt;Plugin)&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#00a000"&gt;Init&lt;/span&gt;(config&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#0b0;font-weight:bold"&gt;string&lt;/span&gt;)&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#0b0;font-weight:bold"&gt;error&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;{&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;p.Config.&lt;span style="color:#00a000"&gt;setDefault&lt;/span&gt;()&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;return&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;json.&lt;span style="color:#00a000"&gt;Unmarshal&lt;/span&gt;([]&lt;span style="color:#a2f"&gt;byte&lt;/span&gt;(config),&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#666"&gt;&amp;amp;&lt;/span&gt;p.Config)&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#080;font-style:italic"&gt;// Fields exposes to Falco plugin framework all availables fields for this plugin&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;func&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;(p&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#666"&gt;*&lt;/span&gt;Plugin)&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#00a000"&gt;Fields&lt;/span&gt;()&lt;span style="color:#bbb"&gt; &lt;/span&gt;[]sdk.FieldEntry&lt;span style="color:#bbb"&gt; &lt;/span&gt;{&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;return&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;[]sdk.FieldEntry{&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;{Type:&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#b44"&gt;&amp;#34;string&amp;#34;&lt;/span&gt;,&lt;span style="color:#bbb"&gt; &lt;/span&gt;Name:&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#b44"&gt;&amp;#34;docker.status&amp;#34;&lt;/span&gt;,&lt;span style="color:#bbb"&gt; &lt;/span&gt;Desc:&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#b44"&gt;&amp;#34;Status of the event&amp;#34;&lt;/span&gt;},&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;{Type:&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#b44"&gt;&amp;#34;string&amp;#34;&lt;/span&gt;,&lt;span style="color:#bbb"&gt; &lt;/span&gt;Name:&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#b44"&gt;&amp;#34;docker.id&amp;#34;&lt;/span&gt;,&lt;span style="color:#bbb"&gt; &lt;/span&gt;Desc:&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#b44"&gt;&amp;#34;ID of the event&amp;#34;&lt;/span&gt;},&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;{Type:&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#b44"&gt;&amp;#34;string&amp;#34;&lt;/span&gt;,&lt;span style="color:#bbb"&gt; &lt;/span&gt;Name:&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#b44"&gt;&amp;#34;docker.from&amp;#34;&lt;/span&gt;,&lt;span style="color:#bbb"&gt; &lt;/span&gt;Desc:&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#b44"&gt;&amp;#34;From of the event (deprecated)&amp;#34;&lt;/span&gt;},&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;{Type:&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#b44"&gt;&amp;#34;string&amp;#34;&lt;/span&gt;,&lt;span style="color:#bbb"&gt; &lt;/span&gt;Name:&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#b44"&gt;&amp;#34;docker.type&amp;#34;&lt;/span&gt;,&lt;span style="color:#bbb"&gt; &lt;/span&gt;Desc:&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#b44"&gt;&amp;#34;Type of the event&amp;#34;&lt;/span&gt;},&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;{Type:&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#b44"&gt;&amp;#34;string&amp;#34;&lt;/span&gt;,&lt;span style="color:#bbb"&gt; &lt;/span&gt;Name:&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#b44"&gt;&amp;#34;docker.action&amp;#34;&lt;/span&gt;,&lt;span style="color:#bbb"&gt; &lt;/span&gt;Desc:&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#b44"&gt;&amp;#34;Action of the event&amp;#34;&lt;/span&gt;},&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;{Type:&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#b44"&gt;&amp;#34;string&amp;#34;&lt;/span&gt;,&lt;span style="color:#bbb"&gt; &lt;/span&gt;Name:&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#b44"&gt;&amp;#34;docker.stack.namespace&amp;#34;&lt;/span&gt;,&lt;span style="color:#bbb"&gt; &lt;/span&gt;Desc:&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#b44"&gt;&amp;#34;Stack Namespace&amp;#34;&lt;/span&gt;},&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;{Type:&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#b44"&gt;&amp;#34;string&amp;#34;&lt;/span&gt;,&lt;span style="color:#bbb"&gt; &lt;/span&gt;Name:&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#b44"&gt;&amp;#34;docker.node.id&amp;#34;&lt;/span&gt;,&lt;span style="color:#bbb"&gt; &lt;/span&gt;Desc:&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#b44"&gt;&amp;#34;Swarm Node ID&amp;#34;&lt;/span&gt;},&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;{Type:&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#b44"&gt;&amp;#34;string&amp;#34;&lt;/span&gt;,&lt;span style="color:#bbb"&gt; &lt;/span&gt;Name:&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#b44"&gt;&amp;#34;docker.swarm.task&amp;#34;&lt;/span&gt;,&lt;span style="color:#bbb"&gt; &lt;/span&gt;Desc:&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#b44"&gt;&amp;#34;Swarm Task&amp;#34;&lt;/span&gt;},&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;{Type:&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#b44"&gt;&amp;#34;string&amp;#34;&lt;/span&gt;,&lt;span style="color:#bbb"&gt; &lt;/span&gt;Name:&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#b44"&gt;&amp;#34;docker.swarm.taskid&amp;#34;&lt;/span&gt;,&lt;span style="color:#bbb"&gt; &lt;/span&gt;Desc:&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#b44"&gt;&amp;#34;Swarm Task ID&amp;#34;&lt;/span&gt;},&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;{Type:&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#b44"&gt;&amp;#34;string&amp;#34;&lt;/span&gt;,&lt;span style="color:#bbb"&gt; &lt;/span&gt;Name:&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#b44"&gt;&amp;#34;docker.swarm.taskname&amp;#34;&lt;/span&gt;,&lt;span style="color:#bbb"&gt; &lt;/span&gt;Desc:&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#b44"&gt;&amp;#34;Swarm Task Name&amp;#34;&lt;/span&gt;},&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;{Type:&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#b44"&gt;&amp;#34;string&amp;#34;&lt;/span&gt;,&lt;span style="color:#bbb"&gt; &lt;/span&gt;Name:&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#b44"&gt;&amp;#34;docker.swarm.servicename&amp;#34;&lt;/span&gt;,&lt;span style="color:#bbb"&gt; &lt;/span&gt;Desc:&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#b44"&gt;&amp;#34;Swarm Service Name&amp;#34;&lt;/span&gt;},&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;{Type:&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#b44"&gt;&amp;#34;string&amp;#34;&lt;/span&gt;,&lt;span style="color:#bbb"&gt; &lt;/span&gt;Name:&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#b44"&gt;&amp;#34;docker.node.statenew&amp;#34;&lt;/span&gt;,&lt;span style="color:#bbb"&gt; &lt;/span&gt;Desc:&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#b44"&gt;&amp;#34;Node New State&amp;#34;&lt;/span&gt;},&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;{Type:&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#b44"&gt;&amp;#34;string&amp;#34;&lt;/span&gt;,&lt;span style="color:#bbb"&gt; &lt;/span&gt;Name:&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#b44"&gt;&amp;#34;docker.node.stateold&amp;#34;&lt;/span&gt;,&lt;span style="color:#bbb"&gt; &lt;/span&gt;Desc:&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#b44"&gt;&amp;#34;Node Old State&amp;#34;&lt;/span&gt;},&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;{Type:&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#b44"&gt;&amp;#34;string&amp;#34;&lt;/span&gt;,&lt;span style="color:#bbb"&gt; &lt;/span&gt;Name:&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#b44"&gt;&amp;#34;docker.attributes.container&amp;#34;&lt;/span&gt;,&lt;span style="color:#bbb"&gt; &lt;/span&gt;Desc:&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#b44"&gt;&amp;#34;Attribute Container&amp;#34;&lt;/span&gt;},&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;{Type:&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#b44"&gt;&amp;#34;string&amp;#34;&lt;/span&gt;,&lt;span style="color:#bbb"&gt; &lt;/span&gt;Name:&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#b44"&gt;&amp;#34;docker.attributes.image&amp;#34;&lt;/span&gt;,&lt;span style="color:#bbb"&gt; &lt;/span&gt;Desc:&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#b44"&gt;&amp;#34;Attribute Image&amp;#34;&lt;/span&gt;},&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;{Type:&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#b44"&gt;&amp;#34;string&amp;#34;&lt;/span&gt;,&lt;span style="color:#bbb"&gt; &lt;/span&gt;Name:&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#b44"&gt;&amp;#34;docker.attributes.name&amp;#34;&lt;/span&gt;,&lt;span style="color:#bbb"&gt; &lt;/span&gt;Desc:&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#b44"&gt;&amp;#34;Attribute Name&amp;#34;&lt;/span&gt;},&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;{Type:&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#b44"&gt;&amp;#34;string&amp;#34;&lt;/span&gt;,&lt;span style="color:#bbb"&gt; &lt;/span&gt;Name:&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#b44"&gt;&amp;#34;docker.attributes.type&amp;#34;&lt;/span&gt;,&lt;span style="color:#bbb"&gt; &lt;/span&gt;Desc:&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#b44"&gt;&amp;#34;Attribute Type&amp;#34;&lt;/span&gt;},&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;{Type:&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#b44"&gt;&amp;#34;string&amp;#34;&lt;/span&gt;,&lt;span style="color:#bbb"&gt; &lt;/span&gt;Name:&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#b44"&gt;&amp;#34;docker.attributes.exitcode&amp;#34;&lt;/span&gt;,&lt;span style="color:#bbb"&gt; &lt;/span&gt;Desc:&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#b44"&gt;&amp;#34;Attribute Exit Code&amp;#34;&lt;/span&gt;},&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;{Type:&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#b44"&gt;&amp;#34;string&amp;#34;&lt;/span&gt;,&lt;span style="color:#bbb"&gt; &lt;/span&gt;Name:&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#b44"&gt;&amp;#34;docker.attributes.signal&amp;#34;&lt;/span&gt;,&lt;span style="color:#bbb"&gt; &lt;/span&gt;Desc:&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#b44"&gt;&amp;#34;Attribute Signal&amp;#34;&lt;/span&gt;},&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;{Type:&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#b44"&gt;&amp;#34;string&amp;#34;&lt;/span&gt;,&lt;span style="color:#bbb"&gt; &lt;/span&gt;Name:&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#b44"&gt;&amp;#34;docker.scope&amp;#34;&lt;/span&gt;,&lt;span style="color:#bbb"&gt; &lt;/span&gt;Desc:&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#b44"&gt;&amp;#34;Scope&amp;#34;&lt;/span&gt;},&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;}&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#080;font-style:italic"&gt;// Extract allows Falco plugin framework to get values for all available fields&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;func&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;(p&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#666"&gt;*&lt;/span&gt;Plugin)&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#00a000"&gt;Extract&lt;/span&gt;(req&lt;span style="color:#bbb"&gt; &lt;/span&gt;sdk.ExtractRequest,&lt;span style="color:#bbb"&gt; &lt;/span&gt;evt&lt;span style="color:#bbb"&gt; &lt;/span&gt;sdk.EventReader)&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#0b0;font-weight:bold"&gt;error&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;{&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;msg&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#666"&gt;:=&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;p.lastDockerEventMessage&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#080;font-style:italic"&gt;// For avoiding to Unmarshal the same message for each field to extract&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#080;font-style:italic"&gt;// we store it with its EventNum. When it&amp;#39;s a new event with a new message, we&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#080;font-style:italic"&gt;// update the Plugin struct.&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;if&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;evt.&lt;span style="color:#00a000"&gt;EventNum&lt;/span&gt;()&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#666"&gt;!=&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;p.lastDockerEventNum&lt;span style="color:#bbb"&gt; &lt;/span&gt;{&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;rawData,&lt;span style="color:#bbb"&gt; &lt;/span&gt;err&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#666"&gt;:=&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;ioutil.&lt;span style="color:#00a000"&gt;ReadAll&lt;/span&gt;(evt.&lt;span style="color:#00a000"&gt;Reader&lt;/span&gt;())&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;if&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;err&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#666"&gt;!=&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;nil&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;{&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;fmt.&lt;span style="color:#00a000"&gt;Println&lt;/span&gt;(err.&lt;span style="color:#00a000"&gt;Error&lt;/span&gt;())&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;return&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;err&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;}&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;err&lt;span style="color:#bbb"&gt; &lt;/span&gt;=&lt;span style="color:#bbb"&gt; &lt;/span&gt;json.&lt;span style="color:#00a000"&gt;Unmarshal&lt;/span&gt;(rawData,&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#666"&gt;&amp;amp;&lt;/span&gt;msg)&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;if&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;err&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#666"&gt;!=&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;nil&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;{&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;return&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;err&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;}&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;p.lastDockerEventMessage&lt;span style="color:#bbb"&gt; &lt;/span&gt;=&lt;span style="color:#bbb"&gt; &lt;/span&gt;msg&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;p.lastDockerEventNum&lt;span style="color:#bbb"&gt; &lt;/span&gt;=&lt;span style="color:#bbb"&gt; &lt;/span&gt;evt.&lt;span style="color:#00a000"&gt;EventNum&lt;/span&gt;()&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;}&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;switch&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;req.&lt;span style="color:#00a000"&gt;Field&lt;/span&gt;()&lt;span style="color:#bbb"&gt; &lt;/span&gt;{&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;case&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#b44"&gt;&amp;#34;docker.status&amp;#34;&lt;/span&gt;:&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;req.&lt;span style="color:#00a000"&gt;SetValue&lt;/span&gt;(msg.Status)&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;case&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#b44"&gt;&amp;#34;docker.id&amp;#34;&lt;/span&gt;:&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;req.&lt;span style="color:#00a000"&gt;SetValue&lt;/span&gt;(msg.ID)&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;case&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#b44"&gt;&amp;#34;docker.from&amp;#34;&lt;/span&gt;:&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;req.&lt;span style="color:#00a000"&gt;SetValue&lt;/span&gt;(msg.From)&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;case&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#b44"&gt;&amp;#34;docker.type&amp;#34;&lt;/span&gt;:&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;req.&lt;span style="color:#00a000"&gt;SetValue&lt;/span&gt;(msg.Type)&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;case&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#b44"&gt;&amp;#34;docker.action&amp;#34;&lt;/span&gt;:&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;req.&lt;span style="color:#00a000"&gt;SetValue&lt;/span&gt;(msg.Action)&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;case&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#b44"&gt;&amp;#34;docker.scope&amp;#34;&lt;/span&gt;:&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;req.&lt;span style="color:#00a000"&gt;SetValue&lt;/span&gt;(msg.Scope)&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;case&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#b44"&gt;&amp;#34;docker.actor.id&amp;#34;&lt;/span&gt;:&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;req.&lt;span style="color:#00a000"&gt;SetValue&lt;/span&gt;(msg.Actor.ID)&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;case&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#b44"&gt;&amp;#34;docker.stack.namespace&amp;#34;&lt;/span&gt;:&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;req.&lt;span style="color:#00a000"&gt;SetValue&lt;/span&gt;(msg.Actor.Attributes[&lt;span style="color:#b44"&gt;&amp;#34;com.docker.stack.namespace&amp;#34;&lt;/span&gt;])&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;case&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#b44"&gt;&amp;#34;docker.swarm.task&amp;#34;&lt;/span&gt;:&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;req.&lt;span style="color:#00a000"&gt;SetValue&lt;/span&gt;(msg.Actor.Attributes[&lt;span style="color:#b44"&gt;&amp;#34;com.docker.swarm.task&amp;#34;&lt;/span&gt;])&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;case&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#b44"&gt;&amp;#34;docker.swarm.taskid&amp;#34;&lt;/span&gt;:&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;req.&lt;span style="color:#00a000"&gt;SetValue&lt;/span&gt;(msg.Actor.Attributes[&lt;span style="color:#b44"&gt;&amp;#34;com.docker.swarm.task.id&amp;#34;&lt;/span&gt;])&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;case&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#b44"&gt;&amp;#34;docker.swarm.taskname&amp;#34;&lt;/span&gt;:&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;req.&lt;span style="color:#00a000"&gt;SetValue&lt;/span&gt;(msg.Actor.Attributes[&lt;span style="color:#b44"&gt;&amp;#34;com.docker.swarm.task.name&amp;#34;&lt;/span&gt;])&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;case&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#b44"&gt;&amp;#34;docker.swarm.servicename&amp;#34;&lt;/span&gt;:&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;req.&lt;span style="color:#00a000"&gt;SetValue&lt;/span&gt;(msg.Actor.Attributes[&lt;span style="color:#b44"&gt;&amp;#34;com.docker.swarm.service.name&amp;#34;&lt;/span&gt;])&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;case&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#b44"&gt;&amp;#34;docker.node.id&amp;#34;&lt;/span&gt;:&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;req.&lt;span style="color:#00a000"&gt;SetValue&lt;/span&gt;(msg.Actor.Attributes[&lt;span style="color:#b44"&gt;&amp;#34;com.docker.swarm.node.id&amp;#34;&lt;/span&gt;])&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;case&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#b44"&gt;&amp;#34;docker.node.statenew&amp;#34;&lt;/span&gt;:&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;req.&lt;span style="color:#00a000"&gt;SetValue&lt;/span&gt;(msg.Actor.Attributes[&lt;span style="color:#b44"&gt;&amp;#34;state.new&amp;#34;&lt;/span&gt;])&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;case&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#b44"&gt;&amp;#34;docker.node.stateold&amp;#34;&lt;/span&gt;:&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;req.&lt;span style="color:#00a000"&gt;SetValue&lt;/span&gt;(msg.Actor.Attributes[&lt;span style="color:#b44"&gt;&amp;#34;state.old&amp;#34;&lt;/span&gt;])&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;case&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#b44"&gt;&amp;#34;docker.attributes.container&amp;#34;&lt;/span&gt;:&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;req.&lt;span style="color:#00a000"&gt;SetValue&lt;/span&gt;(msg.Actor.Attributes[&lt;span style="color:#b44"&gt;&amp;#34;container&amp;#34;&lt;/span&gt;])&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;case&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#b44"&gt;&amp;#34;docker.attributes.image&amp;#34;&lt;/span&gt;:&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;req.&lt;span style="color:#00a000"&gt;SetValue&lt;/span&gt;(msg.Actor.Attributes[&lt;span style="color:#b44"&gt;&amp;#34;image&amp;#34;&lt;/span&gt;])&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;case&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#b44"&gt;&amp;#34;docker.attributes.name&amp;#34;&lt;/span&gt;:&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;req.&lt;span style="color:#00a000"&gt;SetValue&lt;/span&gt;(msg.Actor.Attributes[&lt;span style="color:#b44"&gt;&amp;#34;name&amp;#34;&lt;/span&gt;])&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;case&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#b44"&gt;&amp;#34;docker.attributes.type&amp;#34;&lt;/span&gt;:&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;req.&lt;span style="color:#00a000"&gt;SetValue&lt;/span&gt;(msg.Actor.Attributes[&lt;span style="color:#b44"&gt;&amp;#34;type&amp;#34;&lt;/span&gt;])&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;default&lt;/span&gt;:&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;return&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;fmt.&lt;span style="color:#00a000"&gt;Errorf&lt;/span&gt;(&lt;span style="color:#b44"&gt;&amp;#34;no known field: %s&amp;#34;&lt;/span&gt;,&lt;span style="color:#bbb"&gt; &lt;/span&gt;req.&lt;span style="color:#00a000"&gt;Field&lt;/span&gt;())&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;}&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;return&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;nil&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#080;font-style:italic"&gt;// Open is called by Falco plugin framework for opening a stream of events, we call that an instance&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;func&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;(Plugin&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#666"&gt;*&lt;/span&gt;Plugin)&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#00a000"&gt;Open&lt;/span&gt;(params&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#0b0;font-weight:bold"&gt;string&lt;/span&gt;)&lt;span style="color:#bbb"&gt; &lt;/span&gt;(source.Instance,&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#0b0;font-weight:bold"&gt;error&lt;/span&gt;)&lt;span style="color:#bbb"&gt; &lt;/span&gt;{&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;dclient,&lt;span style="color:#bbb"&gt; &lt;/span&gt;err&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#666"&gt;:=&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;docker.&lt;span style="color:#00a000"&gt;NewClientWithOpts&lt;/span&gt;()&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;if&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;err&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#666"&gt;!=&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;nil&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;{&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;return&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;nil&lt;/span&gt;,&lt;span style="color:#bbb"&gt; &lt;/span&gt;err&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;}&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;eventC&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#666"&gt;:=&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#a2f"&gt;make&lt;/span&gt;(&lt;span style="color:#a2f;font-weight:bold"&gt;chan&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;source.PushEvent)&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;ctx,&lt;span style="color:#bbb"&gt; &lt;/span&gt;cancel&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#666"&gt;:=&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;context.&lt;span style="color:#00a000"&gt;WithCancel&lt;/span&gt;(context.&lt;span style="color:#00a000"&gt;Background&lt;/span&gt;())&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#080;font-style:italic"&gt;// launch an async worker that listens for Docker events and pushes them&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#080;font-style:italic"&gt;// to the event channel&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;go&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;func&lt;/span&gt;()&lt;span style="color:#bbb"&gt; &lt;/span&gt;{&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;defer&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#a2f"&gt;close&lt;/span&gt;(eventC)&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;msgC,&lt;span style="color:#bbb"&gt; &lt;/span&gt;errC&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#666"&gt;:=&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;dclient.&lt;span style="color:#00a000"&gt;Events&lt;/span&gt;(ctx,&lt;span style="color:#bbb"&gt; &lt;/span&gt;dockerTypes.EventsOptions{})&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;var&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;msg&lt;span style="color:#bbb"&gt; &lt;/span&gt;dockerEvents.Message&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;var&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;err&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#0b0;font-weight:bold"&gt;error&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;for&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;{&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;select&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;{&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;case&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;msg&lt;span style="color:#bbb"&gt; &lt;/span&gt;=&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#666"&gt;&amp;lt;-&lt;/span&gt;msgC:&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;bytes,&lt;span style="color:#bbb"&gt; &lt;/span&gt;err&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#666"&gt;:=&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;json.&lt;span style="color:#00a000"&gt;Marshal&lt;/span&gt;(msg)&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;if&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;err&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#666"&gt;!=&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;nil&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;{&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;eventC&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#666"&gt;&amp;lt;-&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;source.PushEvent{Err:&lt;span style="color:#bbb"&gt; &lt;/span&gt;err}&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#080;font-style:italic"&gt;// errors are blocking, so we can stop here&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;return&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;}&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;eventC&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#666"&gt;&amp;lt;-&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;source.PushEvent{Data:&lt;span style="color:#bbb"&gt; &lt;/span&gt;bytes}&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;case&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;err&lt;span style="color:#bbb"&gt; &lt;/span&gt;=&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#666"&gt;&amp;lt;-&lt;/span&gt;errC:&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;if&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;err&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#666"&gt;==&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;io.EOF&lt;span style="color:#bbb"&gt; &lt;/span&gt;{&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#080;font-style:italic"&gt;// map EOF to sdk.ErrEOF, which is recognized by the Go SDK&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;err&lt;span style="color:#bbb"&gt; &lt;/span&gt;=&lt;span style="color:#bbb"&gt; &lt;/span&gt;sdk.ErrEOF&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;}&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;eventC&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#666"&gt;&amp;lt;-&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;source.PushEvent{Err:&lt;span style="color:#bbb"&gt; &lt;/span&gt;err}&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#080;font-style:italic"&gt;// errors are blocking, so we can stop here&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;return&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;}&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;}&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;}()&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;return&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;source.&lt;span style="color:#00a000"&gt;NewPushInstance&lt;/span&gt;(eventC,&lt;span style="color:#bbb"&gt; &lt;/span&gt;source.&lt;span style="color:#00a000"&gt;WithInstanceClose&lt;/span&gt;(cancel))&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#080;font-style:italic"&gt;// String represents the raw value of on event&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#080;font-style:italic"&gt;// (not currently used by Falco plugin framework, only there for future usage)&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;func&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;(Plugin&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#666"&gt;*&lt;/span&gt;Plugin)&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#00a000"&gt;String&lt;/span&gt;(in&lt;span style="color:#bbb"&gt; &lt;/span&gt;io.ReadSeeker)&lt;span style="color:#bbb"&gt; &lt;/span&gt;(&lt;span style="color:#0b0;font-weight:bold"&gt;string&lt;/span&gt;,&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#0b0;font-weight:bold"&gt;error&lt;/span&gt;)&lt;span style="color:#bbb"&gt; &lt;/span&gt;{&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;evtBytes,&lt;span style="color:#bbb"&gt; &lt;/span&gt;err&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#666"&gt;:=&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;ioutil.&lt;span style="color:#00a000"&gt;ReadAll&lt;/span&gt;(in)&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;if&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;err&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#666"&gt;!=&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;nil&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;{&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;return&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#b44"&gt;&amp;#34;&amp;#34;&lt;/span&gt;,&lt;span style="color:#bbb"&gt; &lt;/span&gt;err&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;}&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;evtStr&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#666"&gt;:=&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#a2f"&gt;string&lt;/span&gt;(evtBytes)&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;return&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;fmt.&lt;span style="color:#00a000"&gt;Sprintf&lt;/span&gt;(&lt;span style="color:#b44"&gt;&amp;#34;%v&amp;#34;&lt;/span&gt;,&lt;span style="color:#bbb"&gt; &lt;/span&gt;evtStr),&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;nil&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h4 id="the-imports-1"&gt;The imports&lt;/h4&gt;
&lt;p&gt;Despite basic Go modules, we'll have to import the different modules from &lt;code&gt;plugin-sdk-go&lt;/code&gt; and from &lt;code&gt;Docker SDK&lt;/code&gt; to docker events:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-go" data-lang="go"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;import&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;(&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#b44"&gt;&amp;#34;context&amp;#34;&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#b44"&gt;&amp;#34;encoding/json&amp;#34;&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#b44"&gt;&amp;#34;fmt&amp;#34;&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#b44"&gt;&amp;#34;io&amp;#34;&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#b44"&gt;&amp;#34;io/ioutil&amp;#34;&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#b44"&gt;&amp;#34;github.com/alecthomas/jsonschema&amp;#34;&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#b44"&gt;&amp;#34;github.com/falcosecurity/plugin-sdk-go/pkg/sdk&amp;#34;&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#b44"&gt;&amp;#34;github.com/falcosecurity/plugin-sdk-go/pkg/sdk/plugins&amp;#34;&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#b44"&gt;&amp;#34;github.com/falcosecurity/plugin-sdk-go/pkg/sdk/plugins/source&amp;#34;&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;dockerTypes&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#b44"&gt;&amp;#34;github.com/docker/docker/api/types&amp;#34;&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;dockerEvents&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#b44"&gt;&amp;#34;github.com/docker/docker/api/types/events&amp;#34;&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;docker&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#b44"&gt;&amp;#34;github.com/moby/docker/client&amp;#34;&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;)&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h4 id="the-global-variables"&gt;The global variables&lt;/h4&gt;
&lt;p&gt;Global variables are declared and filled with the &lt;code&gt;SetInfo()&lt;/code&gt; method called by the &lt;code&gt;init()&lt;/code&gt; of the &lt;code&gt;main.go&lt;/code&gt;. These variables are then used to declare the details of the plugin to Falco:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-go" data-lang="go"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;var&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;(&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;ID&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#0b0;font-weight:bold"&gt;uint32&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;Name&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#0b0;font-weight:bold"&gt;string&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;Description&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#0b0;font-weight:bold"&gt;string&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;Contact&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#0b0;font-weight:bold"&gt;string&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;Version&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#0b0;font-weight:bold"&gt;string&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;EventSource&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#0b0;font-weight:bold"&gt;string&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;)&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h4 id="the-structures"&gt;The structures&lt;/h4&gt;
&lt;p&gt;The structure to declare the plugin is mandatory and must respect the &lt;code&gt;interface&lt;/code&gt; declared in the SDK:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-go" data-lang="go"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;type&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;PluginConfig&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;struct&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;{&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;FlushInterval&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#0b0;font-weight:bold"&gt;uint64&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#b44"&gt;`json:&amp;#34;flushInterval&amp;#34; jsonschema:&amp;#34;description=Flush Interval in ms (Default: 30)&amp;#34;`&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#080;font-style:italic"&gt;// Plugin represents our plugin&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;type&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;Plugin&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;struct&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;{&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;plugins.BasePlugin&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;Config&lt;span style="color:#bbb"&gt; &lt;/span&gt;PluginConfig&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;lastDockerEventMessage&lt;span style="color:#bbb"&gt; &lt;/span&gt;dockerEvents.Message&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;lastDockerEventNum&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#0b0;font-weight:bold"&gt;uint64&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;code&gt;Plugin&lt;/code&gt; represents our plugin that will be loaded by the framework. It contains some fields:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;plugins.BasePlugin&lt;/code&gt;: Allows to respect the &lt;a href="https://pkg.go.dev/github.com/falcosecurity/plugin-sdk-go@v0.1.0/pkg/sdk/plugins#Plugin"&gt;&lt;code&gt;Plugin interface&lt;/code&gt;&lt;/a&gt; of the SDK.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Config&lt;/code&gt;: Contains the configuration of our plugin, represented by the &lt;code&gt;PluginConfig&lt;/code&gt; structure.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;lastDockerEventMessage&lt;/code&gt;: Contains the result of the last unmarshalled event.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;lastDockerEventNum&lt;/code&gt;: Contains the number of the unmarshalled event, by comparing it, we avoid to unmarshal the same event several times.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;code&gt;PluginConfig&lt;/code&gt; represents the configuration of our plugin, we'll use the module &lt;code&gt;alecthomas/jsonschema&lt;/code&gt; to map the content of &lt;code&gt;init_config&lt;/code&gt; from the plugin section of &lt;code&gt;falco.yaml&lt;/code&gt; and check its validity:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;plugins&lt;/span&gt;:&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;- &lt;span style="color:#008000;font-weight:bold"&gt;name&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;docker&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;library_path&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;/etc/falco/audit/libdocker.so&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;init_config&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#b44"&gt;&amp;#39;{&amp;#34;flushinterval&amp;#34;: 10}&amp;#39;&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;open_params&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#b44"&gt;&amp;#39;&amp;#39;&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h4 id="the-functions-and-methods"&gt;The functions and methods&lt;/h4&gt;
&lt;h5 id="setinfo"&gt;&lt;code&gt;SetInfo()&lt;/code&gt;&lt;/h5&gt;
&lt;p&gt;It's used to set the global variables which represent the details of our plugin, this method is called by the &lt;code&gt;init()&lt;/code&gt; of the &lt;code&gt;main.go&lt;/code&gt;:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-go" data-lang="go"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#080;font-style:italic"&gt;// SetInfo is used to set the Info of the plugin&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;func&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;(p&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#666"&gt;*&lt;/span&gt;Plugin)&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#00a000"&gt;SetInfo&lt;/span&gt;(id&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#0b0;font-weight:bold"&gt;uint32&lt;/span&gt;,&lt;span style="color:#bbb"&gt; &lt;/span&gt;name,&lt;span style="color:#bbb"&gt; &lt;/span&gt;description,&lt;span style="color:#bbb"&gt; &lt;/span&gt;contact,&lt;span style="color:#bbb"&gt; &lt;/span&gt;version,&lt;span style="color:#bbb"&gt; &lt;/span&gt;eventSource&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#0b0;font-weight:bold"&gt;string&lt;/span&gt;)&lt;span style="color:#bbb"&gt; &lt;/span&gt;{&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;ID&lt;span style="color:#bbb"&gt; &lt;/span&gt;=&lt;span style="color:#bbb"&gt; &lt;/span&gt;id&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;Name&lt;span style="color:#bbb"&gt; &lt;/span&gt;=&lt;span style="color:#bbb"&gt; &lt;/span&gt;name&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;Contact&lt;span style="color:#bbb"&gt; &lt;/span&gt;=&lt;span style="color:#bbb"&gt; &lt;/span&gt;contact&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;Version&lt;span style="color:#bbb"&gt; &lt;/span&gt;=&lt;span style="color:#bbb"&gt; &lt;/span&gt;version&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;EventSource&lt;span style="color:#bbb"&gt; &lt;/span&gt;=&lt;span style="color:#bbb"&gt; &lt;/span&gt;eventSource&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h5 id="info"&gt;&lt;code&gt;Info()&lt;/code&gt;&lt;/h5&gt;
&lt;p&gt;This method is mandatory and all plugins must respect that. It allows the &lt;em&gt;Falco plugin framework&lt;/em&gt; to have all intel about the plugin itself, we use the global variables and the &lt;code&gt;SetInfo()&lt;/code&gt; method to set the values:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-go" data-lang="go"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#080;font-style:italic"&gt;// Info displays information of the plugin to Falco plugin framework&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;func&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;(p&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#666"&gt;*&lt;/span&gt;Plugin)&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#00a000"&gt;Info&lt;/span&gt;()&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#666"&gt;*&lt;/span&gt;plugins.Info&lt;span style="color:#bbb"&gt; &lt;/span&gt;{&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;return&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#666"&gt;&amp;amp;&lt;/span&gt;plugins.Info{&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;ID:&lt;span style="color:#bbb"&gt; &lt;/span&gt;ID,&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;Name:&lt;span style="color:#bbb"&gt; &lt;/span&gt;Name,&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;Description:&lt;span style="color:#bbb"&gt; &lt;/span&gt;Description,&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;Contact:&lt;span style="color:#bbb"&gt; &lt;/span&gt;Contact,&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;Version:&lt;span style="color:#bbb"&gt; &lt;/span&gt;Version,&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;EventSource:&lt;span style="color:#bbb"&gt; &lt;/span&gt;EventSource,&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;}&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h5 id="init-1"&gt;&lt;code&gt;Init()&lt;/code&gt;&lt;/h5&gt;
&lt;p&gt;This method (different from the function &lt;code&gt;init()&lt;/code&gt;) will be the first one called by the &lt;em&gt;Falco plugin framework&lt;/em&gt;, we use &lt;code&gt;setDefault()&lt;/code&gt; to set the default values of the config. In our case, these default values are overridden by the values from &lt;code&gt;init_config:&lt;/code&gt;.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-go" data-lang="go"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#080;font-style:italic"&gt;// Init is called by the Falco plugin framework as first entry,&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#080;font-style:italic"&gt;// we use it for setting default configuration values and mapping&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#080;font-style:italic"&gt;// values from `init_config` (json format for this plugin)&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;func&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;(p&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#666"&gt;*&lt;/span&gt;Plugin)&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#00a000"&gt;Init&lt;/span&gt;(config&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#0b0;font-weight:bold"&gt;string&lt;/span&gt;)&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#0b0;font-weight:bold"&gt;error&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;{&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;p.Config.&lt;span style="color:#00a000"&gt;setDefault&lt;/span&gt;()&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;return&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;json.&lt;span style="color:#00a000"&gt;Unmarshal&lt;/span&gt;([]&lt;span style="color:#a2f"&gt;byte&lt;/span&gt;(config),&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#666"&gt;&amp;amp;&lt;/span&gt;p.Config)&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h5 id="initschema"&gt;&lt;code&gt;InitSchema()&lt;/code&gt;&lt;/h5&gt;
&lt;p&gt;&lt;code&gt;InitSchema()&lt;/code&gt; and the &lt;code&gt;jsonschema&lt;/code&gt; tags from the fields of &lt;code&gt;PluginConfig&lt;/code&gt; struct are used to check the validity of the content of &lt;code&gt;init_config&lt;/code&gt; from &lt;code&gt;falco.yaml&lt;/code&gt;.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-go" data-lang="go"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#080;font-style:italic"&gt;// InitSchema map the configuration values with Plugin structure through JSONSchema tags&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;func&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;(p&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#666"&gt;*&lt;/span&gt;Plugin)&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#00a000"&gt;InitSchema&lt;/span&gt;()&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#666"&gt;*&lt;/span&gt;sdk.SchemaInfo&lt;span style="color:#bbb"&gt; &lt;/span&gt;{&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;reflector&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#666"&gt;:=&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;jsonschema.Reflector{&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;RequiredFromJSONSchemaTags:&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;true&lt;/span&gt;,&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#080;font-style:italic"&gt;// all properties are optional by default&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;AllowAdditionalProperties:&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;true&lt;/span&gt;,&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#080;font-style:italic"&gt;// unrecognized properties don&amp;#39;t cause a parsing failures&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;}&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;if&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;schema,&lt;span style="color:#bbb"&gt; &lt;/span&gt;err&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#666"&gt;:=&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;reflector.&lt;span style="color:#00a000"&gt;Reflect&lt;/span&gt;(&lt;span style="color:#666"&gt;&amp;amp;&lt;/span&gt;PluginConfig{}).&lt;span style="color:#00a000"&gt;MarshalJSON&lt;/span&gt;();&lt;span style="color:#bbb"&gt; &lt;/span&gt;err&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#666"&gt;==&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;nil&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;{&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;return&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#666"&gt;&amp;amp;&lt;/span&gt;sdk.SchemaInfo{&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;Schema:&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#a2f"&gt;string&lt;/span&gt;(schema),&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;}&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;}&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;return&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;nil&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;It uses a json schema reflector, see &lt;a href="https://github.com/invopop/jsonschema"&gt;jsonschema&lt;/a&gt; for more details about how it works.&lt;/p&gt;
&lt;h5 id="fields"&gt;&lt;code&gt;Fields()&lt;/code&gt;&lt;/h5&gt;
&lt;p&gt;This method declares to the &lt;em&gt;Falco plugin framework&lt;/em&gt; all &lt;code&gt;fields&lt;/code&gt; that will be available for the rules, with their names and their types.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-go" data-lang="go"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#080;font-style:italic"&gt;// Fields exposes to Falco plugin framework all availables fields for this plugin&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;func&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;(dockerPlugin&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#666"&gt;*&lt;/span&gt;DockerPlugin)&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#00a000"&gt;Fields&lt;/span&gt;()&lt;span style="color:#bbb"&gt; &lt;/span&gt;[]sdk.FieldEntry&lt;span style="color:#bbb"&gt; &lt;/span&gt;{&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;return&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;[]sdk.FieldEntry{&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;{Type:&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#b44"&gt;&amp;#34;string&amp;#34;&lt;/span&gt;,&lt;span style="color:#bbb"&gt; &lt;/span&gt;Name:&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#b44"&gt;&amp;#34;docker.status&amp;#34;&lt;/span&gt;,&lt;span style="color:#bbb"&gt; &lt;/span&gt;Desc:&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#b44"&gt;&amp;#34;Status&amp;#34;&lt;/span&gt;},&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;{Type:&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#b44"&gt;&amp;#34;string&amp;#34;&lt;/span&gt;,&lt;span style="color:#bbb"&gt; &lt;/span&gt;Name:&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#b44"&gt;&amp;#34;docker.id&amp;#34;&lt;/span&gt;,&lt;span style="color:#bbb"&gt; &lt;/span&gt;Desc:&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#b44"&gt;&amp;#34;ID&amp;#34;&lt;/span&gt;},&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;{Type:&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#b44"&gt;&amp;#34;string&amp;#34;&lt;/span&gt;,&lt;span style="color:#bbb"&gt; &lt;/span&gt;Name:&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#b44"&gt;&amp;#34;docker.from&amp;#34;&lt;/span&gt;,&lt;span style="color:#bbb"&gt; &lt;/span&gt;Desc:&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#b44"&gt;&amp;#34;From&amp;#34;&lt;/span&gt;},&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;{Type:&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#b44"&gt;&amp;#34;string&amp;#34;&lt;/span&gt;,&lt;span style="color:#bbb"&gt; &lt;/span&gt;Name:&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#b44"&gt;&amp;#34;docker.type&amp;#34;&lt;/span&gt;,&lt;span style="color:#bbb"&gt; &lt;/span&gt;Desc:&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#b44"&gt;&amp;#34;Type&amp;#34;&lt;/span&gt;},&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;{Type:&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#b44"&gt;&amp;#34;string&amp;#34;&lt;/span&gt;,&lt;span style="color:#bbb"&gt; &lt;/span&gt;Name:&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#b44"&gt;&amp;#34;docker.action&amp;#34;&lt;/span&gt;,&lt;span style="color:#bbb"&gt; &lt;/span&gt;Desc:&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#b44"&gt;&amp;#34;Action&amp;#34;&lt;/span&gt;},&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;{Type:&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#b44"&gt;&amp;#34;string&amp;#34;&lt;/span&gt;,&lt;span style="color:#bbb"&gt; &lt;/span&gt;Name:&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#b44"&gt;&amp;#34;docker.stack.namespace&amp;#34;&lt;/span&gt;,&lt;span style="color:#bbb"&gt; &lt;/span&gt;Desc:&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#b44"&gt;&amp;#34;Stack Namespace&amp;#34;&lt;/span&gt;},&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;{Type:&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#b44"&gt;&amp;#34;string&amp;#34;&lt;/span&gt;,&lt;span style="color:#bbb"&gt; &lt;/span&gt;Name:&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#b44"&gt;&amp;#34;docker.node.id&amp;#34;&lt;/span&gt;,&lt;span style="color:#bbb"&gt; &lt;/span&gt;Desc:&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#b44"&gt;&amp;#34;Swarm Node ID&amp;#34;&lt;/span&gt;},&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;{Type:&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#b44"&gt;&amp;#34;string&amp;#34;&lt;/span&gt;,&lt;span style="color:#bbb"&gt; &lt;/span&gt;Name:&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#b44"&gt;&amp;#34;docker.swarm.task&amp;#34;&lt;/span&gt;,&lt;span style="color:#bbb"&gt; &lt;/span&gt;Desc:&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#b44"&gt;&amp;#34;Swarm Task&amp;#34;&lt;/span&gt;},&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;{Type:&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#b44"&gt;&amp;#34;string&amp;#34;&lt;/span&gt;,&lt;span style="color:#bbb"&gt; &lt;/span&gt;Name:&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#b44"&gt;&amp;#34;docker.swarm.taskid&amp;#34;&lt;/span&gt;,&lt;span style="color:#bbb"&gt; &lt;/span&gt;Desc:&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#b44"&gt;&amp;#34;Swarm Task ID&amp;#34;&lt;/span&gt;},&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;{Type:&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#b44"&gt;&amp;#34;string&amp;#34;&lt;/span&gt;,&lt;span style="color:#bbb"&gt; &lt;/span&gt;Name:&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#b44"&gt;&amp;#34;docker.swarm.taskname&amp;#34;&lt;/span&gt;,&lt;span style="color:#bbb"&gt; &lt;/span&gt;Desc:&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#b44"&gt;&amp;#34;Swarm Task Name&amp;#34;&lt;/span&gt;},&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;{Type:&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#b44"&gt;&amp;#34;string&amp;#34;&lt;/span&gt;,&lt;span style="color:#bbb"&gt; &lt;/span&gt;Name:&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#b44"&gt;&amp;#34;docker.swarm.servicename&amp;#34;&lt;/span&gt;,&lt;span style="color:#bbb"&gt; &lt;/span&gt;Desc:&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#b44"&gt;&amp;#34;Swarm Service Name&amp;#34;&lt;/span&gt;},&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;{Type:&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#b44"&gt;&amp;#34;string&amp;#34;&lt;/span&gt;,&lt;span style="color:#bbb"&gt; &lt;/span&gt;Name:&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#b44"&gt;&amp;#34;docker.node.statenew&amp;#34;&lt;/span&gt;,&lt;span style="color:#bbb"&gt; &lt;/span&gt;Desc:&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#b44"&gt;&amp;#34;Node New State&amp;#34;&lt;/span&gt;},&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;{Type:&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#b44"&gt;&amp;#34;string&amp;#34;&lt;/span&gt;,&lt;span style="color:#bbb"&gt; &lt;/span&gt;Name:&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#b44"&gt;&amp;#34;docker.node.stateold&amp;#34;&lt;/span&gt;,&lt;span style="color:#bbb"&gt; &lt;/span&gt;Desc:&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#b44"&gt;&amp;#34;Node Old State&amp;#34;&lt;/span&gt;},&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;{Type:&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#b44"&gt;&amp;#34;string&amp;#34;&lt;/span&gt;,&lt;span style="color:#bbb"&gt; &lt;/span&gt;Name:&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#b44"&gt;&amp;#34;docker.attributes.container&amp;#34;&lt;/span&gt;,&lt;span style="color:#bbb"&gt; &lt;/span&gt;Desc:&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#b44"&gt;&amp;#34;Attribute Container&amp;#34;&lt;/span&gt;},&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;{Type:&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#b44"&gt;&amp;#34;string&amp;#34;&lt;/span&gt;,&lt;span style="color:#bbb"&gt; &lt;/span&gt;Name:&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#b44"&gt;&amp;#34;docker.attributes.image&amp;#34;&lt;/span&gt;,&lt;span style="color:#bbb"&gt; &lt;/span&gt;Desc:&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#b44"&gt;&amp;#34;Attribute Image&amp;#34;&lt;/span&gt;},&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;{Type:&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#b44"&gt;&amp;#34;string&amp;#34;&lt;/span&gt;,&lt;span style="color:#bbb"&gt; &lt;/span&gt;Name:&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#b44"&gt;&amp;#34;docker.attributes.name&amp;#34;&lt;/span&gt;,&lt;span style="color:#bbb"&gt; &lt;/span&gt;Desc:&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#b44"&gt;&amp;#34;Attribute Name&amp;#34;&lt;/span&gt;},&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;{Type:&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#b44"&gt;&amp;#34;string&amp;#34;&lt;/span&gt;,&lt;span style="color:#bbb"&gt; &lt;/span&gt;Name:&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#b44"&gt;&amp;#34;docker.attributes.type&amp;#34;&lt;/span&gt;,&lt;span style="color:#bbb"&gt; &lt;/span&gt;Desc:&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#b44"&gt;&amp;#34;Attribute Type&amp;#34;&lt;/span&gt;},&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;{Type:&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#b44"&gt;&amp;#34;string&amp;#34;&lt;/span&gt;,&lt;span style="color:#bbb"&gt; &lt;/span&gt;Name:&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#b44"&gt;&amp;#34;docker.attributes.exitcode&amp;#34;&lt;/span&gt;,&lt;span style="color:#bbb"&gt; &lt;/span&gt;Desc:&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#b44"&gt;&amp;#34;Attribute Exit Code&amp;#34;&lt;/span&gt;},&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;{Type:&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#b44"&gt;&amp;#34;string&amp;#34;&lt;/span&gt;,&lt;span style="color:#bbb"&gt; &lt;/span&gt;Name:&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#b44"&gt;&amp;#34;docker.attributes.signal&amp;#34;&lt;/span&gt;,&lt;span style="color:#bbb"&gt; &lt;/span&gt;Desc:&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#b44"&gt;&amp;#34;Attribute Signal&amp;#34;&lt;/span&gt;},&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;{Type:&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#b44"&gt;&amp;#34;string&amp;#34;&lt;/span&gt;,&lt;span style="color:#bbb"&gt; &lt;/span&gt;Name:&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#b44"&gt;&amp;#34;docker.scope&amp;#34;&lt;/span&gt;,&lt;span style="color:#bbb"&gt; &lt;/span&gt;Desc:&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#b44"&gt;&amp;#34;Scope&amp;#34;&lt;/span&gt;},&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;}&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h5 id="string"&gt;&lt;code&gt;String()&lt;/code&gt;&lt;/h5&gt;
&lt;p&gt;Even if this method is mandatory, it's not used by &lt;code&gt;Falco&lt;/code&gt; for now but must be set up for future usage. It simply retrieves the events, it can be in JSON or any format as long it contains the whole content of the source event.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-go" data-lang="go"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#080;font-style:italic"&gt;// String represents the raw value of on event&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#080;font-style:italic"&gt;// (not currently used by Falco plugin framework, only there for future usage)&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;func&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;(dockerPlugin&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#666"&gt;*&lt;/span&gt;DockerPlugin)&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#00a000"&gt;String&lt;/span&gt;(in&lt;span style="color:#bbb"&gt; &lt;/span&gt;io.ReadSeeker)&lt;span style="color:#bbb"&gt; &lt;/span&gt;(&lt;span style="color:#0b0;font-weight:bold"&gt;string&lt;/span&gt;,&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#0b0;font-weight:bold"&gt;error&lt;/span&gt;)&lt;span style="color:#bbb"&gt; &lt;/span&gt;{&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;evtBytes,&lt;span style="color:#bbb"&gt; &lt;/span&gt;err&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#666"&gt;:=&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;ioutil.&lt;span style="color:#00a000"&gt;ReadAll&lt;/span&gt;(in)&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;if&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;err&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#666"&gt;!=&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;nil&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;{&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;return&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#b44"&gt;&amp;#34;&amp;#34;&lt;/span&gt;,&lt;span style="color:#bbb"&gt; &lt;/span&gt;err&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;}&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;evtStr&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#666"&gt;:=&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#a2f"&gt;string&lt;/span&gt;(evtBytes)&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;return&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;fmt.&lt;span style="color:#00a000"&gt;Sprintf&lt;/span&gt;(&lt;span style="color:#b44"&gt;&amp;#34;%v&amp;#34;&lt;/span&gt;,&lt;span style="color:#bbb"&gt; &lt;/span&gt;evtStr),&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;nil&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h5 id="extract"&gt;&lt;code&gt;Extract()&lt;/code&gt;&lt;/h5&gt;
&lt;p&gt;This method is called by the &lt;em&gt;Falco plugin framework&lt;/em&gt; for getting the values of &lt;code&gt;fields&lt;/code&gt;:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-go" data-lang="go"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#080;font-style:italic"&gt;// Extract allows Falco plugin framework to get values for all available fields&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;func&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;(p&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#666"&gt;*&lt;/span&gt;Plugin)&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#00a000"&gt;Extract&lt;/span&gt;(req&lt;span style="color:#bbb"&gt; &lt;/span&gt;sdk.ExtractRequest,&lt;span style="color:#bbb"&gt; &lt;/span&gt;evt&lt;span style="color:#bbb"&gt; &lt;/span&gt;sdk.EventReader)&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#0b0;font-weight:bold"&gt;error&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;{&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;msg&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#666"&gt;:=&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;p.lastDockerEventMessage&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#080;font-style:italic"&gt;// For avoiding to Unmarshal the same message for each field to extract&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#080;font-style:italic"&gt;// we store it with its EventNum. When it&amp;#39;s a new event with a new message, we&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#080;font-style:italic"&gt;// update the Plugin struct.&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;if&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;evt.&lt;span style="color:#00a000"&gt;EventNum&lt;/span&gt;()&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#666"&gt;!=&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;p.lastDockerEventNum&lt;span style="color:#bbb"&gt; &lt;/span&gt;{&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;rawData,&lt;span style="color:#bbb"&gt; &lt;/span&gt;err&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#666"&gt;:=&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;ioutil.&lt;span style="color:#00a000"&gt;ReadAll&lt;/span&gt;(evt.&lt;span style="color:#00a000"&gt;Reader&lt;/span&gt;())&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;if&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;err&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#666"&gt;!=&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;nil&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;{&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;fmt.&lt;span style="color:#00a000"&gt;Println&lt;/span&gt;(err.&lt;span style="color:#00a000"&gt;Error&lt;/span&gt;())&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;return&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;err&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;}&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;err&lt;span style="color:#bbb"&gt; &lt;/span&gt;=&lt;span style="color:#bbb"&gt; &lt;/span&gt;json.&lt;span style="color:#00a000"&gt;Unmarshal&lt;/span&gt;(rawData,&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#666"&gt;&amp;amp;&lt;/span&gt;msg)&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;if&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;err&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#666"&gt;!=&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;nil&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;{&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;return&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;err&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;}&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;p.lastDockerEventMessage&lt;span style="color:#bbb"&gt; &lt;/span&gt;=&lt;span style="color:#bbb"&gt; &lt;/span&gt;msg&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;p.lastDockerEventNum&lt;span style="color:#bbb"&gt; &lt;/span&gt;=&lt;span style="color:#bbb"&gt; &lt;/span&gt;evt.&lt;span style="color:#00a000"&gt;EventNum&lt;/span&gt;()&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;}&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;switch&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;req.&lt;span style="color:#00a000"&gt;Field&lt;/span&gt;()&lt;span style="color:#bbb"&gt; &lt;/span&gt;{&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;case&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#b44"&gt;&amp;#34;docker.status&amp;#34;&lt;/span&gt;:&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;req.&lt;span style="color:#00a000"&gt;SetValue&lt;/span&gt;(msg.Status)&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;case&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#b44"&gt;&amp;#34;docker.id&amp;#34;&lt;/span&gt;:&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;req.&lt;span style="color:#00a000"&gt;SetValue&lt;/span&gt;(msg.ID)&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;case&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#b44"&gt;&amp;#34;docker.from&amp;#34;&lt;/span&gt;:&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;req.&lt;span style="color:#00a000"&gt;SetValue&lt;/span&gt;(msg.From)&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;case&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#b44"&gt;&amp;#34;docker.type&amp;#34;&lt;/span&gt;:&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;req.&lt;span style="color:#00a000"&gt;SetValue&lt;/span&gt;(msg.Type)&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;case&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#b44"&gt;&amp;#34;docker.action&amp;#34;&lt;/span&gt;:&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;req.&lt;span style="color:#00a000"&gt;SetValue&lt;/span&gt;(msg.Action)&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;case&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#b44"&gt;&amp;#34;docker.scope&amp;#34;&lt;/span&gt;:&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;req.&lt;span style="color:#00a000"&gt;SetValue&lt;/span&gt;(msg.Scope)&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;case&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#b44"&gt;&amp;#34;docker.actor.id&amp;#34;&lt;/span&gt;:&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;req.&lt;span style="color:#00a000"&gt;SetValue&lt;/span&gt;(msg.Actor.ID)&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;case&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#b44"&gt;&amp;#34;docker.stack.namespace&amp;#34;&lt;/span&gt;:&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;req.&lt;span style="color:#00a000"&gt;SetValue&lt;/span&gt;(msg.Actor.Attributes[&lt;span style="color:#b44"&gt;&amp;#34;com.docker.stack.namespace&amp;#34;&lt;/span&gt;])&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;case&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#b44"&gt;&amp;#34;docker.swarm.task&amp;#34;&lt;/span&gt;:&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;req.&lt;span style="color:#00a000"&gt;SetValue&lt;/span&gt;(msg.Actor.Attributes[&lt;span style="color:#b44"&gt;&amp;#34;com.docker.swarm.task&amp;#34;&lt;/span&gt;])&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;case&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#b44"&gt;&amp;#34;docker.swarm.taskid&amp;#34;&lt;/span&gt;:&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;req.&lt;span style="color:#00a000"&gt;SetValue&lt;/span&gt;(msg.Actor.Attributes[&lt;span style="color:#b44"&gt;&amp;#34;com.docker.swarm.task.id&amp;#34;&lt;/span&gt;])&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;case&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#b44"&gt;&amp;#34;docker.swarm.taskname&amp;#34;&lt;/span&gt;:&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;req.&lt;span style="color:#00a000"&gt;SetValue&lt;/span&gt;(msg.Actor.Attributes[&lt;span style="color:#b44"&gt;&amp;#34;com.docker.swarm.task.name&amp;#34;&lt;/span&gt;])&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;case&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#b44"&gt;&amp;#34;docker.swarm.servicename&amp;#34;&lt;/span&gt;:&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;req.&lt;span style="color:#00a000"&gt;SetValue&lt;/span&gt;(msg.Actor.Attributes[&lt;span style="color:#b44"&gt;&amp;#34;com.docker.swarm.service.name&amp;#34;&lt;/span&gt;])&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;case&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#b44"&gt;&amp;#34;docker.node.id&amp;#34;&lt;/span&gt;:&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;req.&lt;span style="color:#00a000"&gt;SetValue&lt;/span&gt;(msg.Actor.Attributes[&lt;span style="color:#b44"&gt;&amp;#34;com.docker.swarm.node.id&amp;#34;&lt;/span&gt;])&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;case&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#b44"&gt;&amp;#34;docker.node.statenew&amp;#34;&lt;/span&gt;:&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;req.&lt;span style="color:#00a000"&gt;SetValue&lt;/span&gt;(msg.Actor.Attributes[&lt;span style="color:#b44"&gt;&amp;#34;state.new&amp;#34;&lt;/span&gt;])&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;case&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#b44"&gt;&amp;#34;docker.node.stateold&amp;#34;&lt;/span&gt;:&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;req.&lt;span style="color:#00a000"&gt;SetValue&lt;/span&gt;(msg.Actor.Attributes[&lt;span style="color:#b44"&gt;&amp;#34;state.old&amp;#34;&lt;/span&gt;])&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;case&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#b44"&gt;&amp;#34;docker.attributes.container&amp;#34;&lt;/span&gt;:&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;req.&lt;span style="color:#00a000"&gt;SetValue&lt;/span&gt;(msg.Actor.Attributes[&lt;span style="color:#b44"&gt;&amp;#34;container&amp;#34;&lt;/span&gt;])&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;case&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#b44"&gt;&amp;#34;docker.attributes.image&amp;#34;&lt;/span&gt;:&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;req.&lt;span style="color:#00a000"&gt;SetValue&lt;/span&gt;(msg.Actor.Attributes[&lt;span style="color:#b44"&gt;&amp;#34;image&amp;#34;&lt;/span&gt;])&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;case&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#b44"&gt;&amp;#34;docker.attributes.name&amp;#34;&lt;/span&gt;:&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;req.&lt;span style="color:#00a000"&gt;SetValue&lt;/span&gt;(msg.Actor.Attributes[&lt;span style="color:#b44"&gt;&amp;#34;name&amp;#34;&lt;/span&gt;])&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;case&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#b44"&gt;&amp;#34;docker.attributes.type&amp;#34;&lt;/span&gt;:&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;req.&lt;span style="color:#00a000"&gt;SetValue&lt;/span&gt;(msg.Actor.Attributes[&lt;span style="color:#b44"&gt;&amp;#34;type&amp;#34;&lt;/span&gt;])&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;default&lt;/span&gt;:&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;return&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;fmt.&lt;span style="color:#00a000"&gt;Errorf&lt;/span&gt;(&lt;span style="color:#b44"&gt;&amp;#34;no known field: %s&amp;#34;&lt;/span&gt;,&lt;span style="color:#bbb"&gt; &lt;/span&gt;req.&lt;span style="color:#00a000"&gt;Field&lt;/span&gt;())&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;}&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;return&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;nil&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="card card-sm pageinfo pageinfo-warning my-4"&gt;
&lt;div class="card-body"&gt;
&lt;div class="card-text"&gt;
&lt;p&gt;Try to not overlap the &lt;code&gt;fields&lt;/code&gt; created by other plugins, for eg, in this example we can use &lt;code&gt;docker.&lt;/code&gt; prefix because &lt;code&gt;Falco&lt;/code&gt; libs use &lt;code&gt;container.&lt;/code&gt; fields which are more generic, so we've not a conflict.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;For this plugin, we use the modules provided by the &lt;code&gt;Docker SDK&lt;/code&gt;, all retrieved events will be unmarshaled into the &lt;a href="https://pkg.go.dev/github.com/docker/docker@v20.10.12&amp;#43;incompatible/api/types/events#Message"&gt;&lt;code&gt;events.Message&lt;/code&gt;&lt;/a&gt; struct which simplifies the mapping and the extraction of fields.&lt;/p&gt;
&lt;div class="card card-sm pageinfo pageinfo-info my-4"&gt;
&lt;div class="card-body"&gt;
&lt;div class="card-text"&gt;
&lt;p&gt;To avoid to unmarshall for each field extraction the same message and impact the performances, we store the number (=~ event ID) and the result of the last unmarshalled message. When the number change, it means it's not the same event and we can unmarshall its message and store it with its number.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-go" data-lang="go"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;msg&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#666"&gt;:=&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;p.lastDockerEventMessage&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#080;font-style:italic"&gt;// For avoiding to Unmarshal the same message for each field to extract&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#080;font-style:italic"&gt;// we store it with its EventNum. When it&amp;#39;s a new event with a new message, we&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#080;font-style:italic"&gt;// update the Plugin struct.&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;if&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;evt.&lt;span style="color:#00a000"&gt;EventNum&lt;/span&gt;()&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#666"&gt;!=&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;p.lastDockerEventNum&lt;span style="color:#bbb"&gt; &lt;/span&gt;{&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;rawData,&lt;span style="color:#bbb"&gt; &lt;/span&gt;err&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#666"&gt;:=&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;ioutil.&lt;span style="color:#00a000"&gt;ReadAll&lt;/span&gt;(evt.&lt;span style="color:#00a000"&gt;Reader&lt;/span&gt;())&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;if&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;err&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#666"&gt;!=&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;nil&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;{&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;fmt.&lt;span style="color:#00a000"&gt;Println&lt;/span&gt;(err.&lt;span style="color:#00a000"&gt;Error&lt;/span&gt;())&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;return&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;err&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;}&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;err&lt;span style="color:#bbb"&gt; &lt;/span&gt;=&lt;span style="color:#bbb"&gt; &lt;/span&gt;json.&lt;span style="color:#00a000"&gt;Unmarshal&lt;/span&gt;(rawData,&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#666"&gt;&amp;amp;&lt;/span&gt;msg)&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;if&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;err&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#666"&gt;!=&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;nil&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;{&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;return&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;err&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;}&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;p.lastDockerEventMessage&lt;span style="color:#bbb"&gt; &lt;/span&gt;=&lt;span style="color:#bbb"&gt; &lt;/span&gt;msg&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;p.lastDockerEventNum&lt;span style="color:#bbb"&gt; &lt;/span&gt;=&lt;span style="color:#bbb"&gt; &lt;/span&gt;evt.&lt;span style="color:#00a000"&gt;EventNum&lt;/span&gt;()&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;}&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h5 id="open"&gt;&lt;code&gt;Open()&lt;/code&gt;&lt;/h5&gt;
&lt;p&gt;This methods is used by the &lt;em&gt;Falco plugin framework&lt;/em&gt; for opening a new &lt;code&gt;stream&lt;/code&gt; of events, what is called an &lt;code&gt;instance&lt;/code&gt; (&lt;code&gt;source.Instance&lt;/code&gt;). The current implementation creates only one &lt;code&gt;instance&lt;/code&gt; per plugin but it's possible in future that same &lt;code&gt;plugin&lt;/code&gt; allows to open several streams, and so several &lt;code&gt;instances&lt;/code&gt; at once.&lt;/p&gt;
&lt;p&gt;To simplify the creation of this &lt;code&gt;source.Instance&lt;/code&gt;, the Go SDK provides two easy functions, see the &lt;a href="https://falco.org/docs/plugins/go-sdk-walkthrough/#best-practices-and-go-sdk-prebuilts-for-source-instances"&gt;docs&lt;/a&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;source.NewPullInstance&lt;/code&gt;: for when the event source can be implemented sequentially and the time required to generate a sequence of event is deterministic, eg: periodic calls to an external API&lt;/li&gt;
&lt;li&gt;&lt;code&gt;source.NewPushInstance&lt;/code&gt;: for when the event source can be suspensive and there is no time guarantee regarding when an event gets produced, eg: we wait a webhook from an external service&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;For collecting events from &lt;code&gt;docker&lt;/code&gt;, we'll use &lt;code&gt;source.NewPushInstance&lt;/code&gt; as the &lt;code&gt;docker SDK&lt;/code&gt; creates a channel and sends the events into when they happened.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-go" data-lang="go"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#080;font-style:italic"&gt;// Open is called by Falco plugin framework for opening a stream of events, we call that an instance&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;func&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;(Plugin&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#666"&gt;*&lt;/span&gt;Plugin)&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#00a000"&gt;Open&lt;/span&gt;(params&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#0b0;font-weight:bold"&gt;string&lt;/span&gt;)&lt;span style="color:#bbb"&gt; &lt;/span&gt;(source.Instance,&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#0b0;font-weight:bold"&gt;error&lt;/span&gt;)&lt;span style="color:#bbb"&gt; &lt;/span&gt;{&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;dclient,&lt;span style="color:#bbb"&gt; &lt;/span&gt;err&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#666"&gt;:=&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;docker.&lt;span style="color:#00a000"&gt;NewClientWithOpts&lt;/span&gt;()&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;if&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;err&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#666"&gt;!=&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;nil&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;{&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;return&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;nil&lt;/span&gt;,&lt;span style="color:#bbb"&gt; &lt;/span&gt;err&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;}&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;eventC&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#666"&gt;:=&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#a2f"&gt;make&lt;/span&gt;(&lt;span style="color:#a2f;font-weight:bold"&gt;chan&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;source.PushEvent)&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;ctx,&lt;span style="color:#bbb"&gt; &lt;/span&gt;cancel&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#666"&gt;:=&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;context.&lt;span style="color:#00a000"&gt;WithCancel&lt;/span&gt;(context.&lt;span style="color:#00a000"&gt;Background&lt;/span&gt;())&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#080;font-style:italic"&gt;// launch an async worker that listens for Docker events and pushes them&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#080;font-style:italic"&gt;// to the event channel&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;go&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;func&lt;/span&gt;()&lt;span style="color:#bbb"&gt; &lt;/span&gt;{&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;defer&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#a2f"&gt;close&lt;/span&gt;(eventC)&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;msgC,&lt;span style="color:#bbb"&gt; &lt;/span&gt;errC&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#666"&gt;:=&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;dclient.&lt;span style="color:#00a000"&gt;Events&lt;/span&gt;(ctx,&lt;span style="color:#bbb"&gt; &lt;/span&gt;dockerTypes.EventsOptions{})&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;var&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;msg&lt;span style="color:#bbb"&gt; &lt;/span&gt;dockerEvents.Message&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;var&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;err&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#0b0;font-weight:bold"&gt;error&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;for&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;{&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;select&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;{&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;case&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;msg&lt;span style="color:#bbb"&gt; &lt;/span&gt;=&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#666"&gt;&amp;lt;-&lt;/span&gt;msgC:&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;bytes,&lt;span style="color:#bbb"&gt; &lt;/span&gt;err&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#666"&gt;:=&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;json.&lt;span style="color:#00a000"&gt;Marshal&lt;/span&gt;(msg)&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;if&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;err&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#666"&gt;!=&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;nil&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;{&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;eventC&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#666"&gt;&amp;lt;-&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;source.PushEvent{Err:&lt;span style="color:#bbb"&gt; &lt;/span&gt;err}&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#080;font-style:italic"&gt;// errors are blocking, so we can stop here&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;return&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;}&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;eventC&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#666"&gt;&amp;lt;-&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;source.PushEvent{Data:&lt;span style="color:#bbb"&gt; &lt;/span&gt;bytes}&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;case&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;err&lt;span style="color:#bbb"&gt; &lt;/span&gt;=&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#666"&gt;&amp;lt;-&lt;/span&gt;errC:&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;if&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;err&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#666"&gt;==&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;io.EOF&lt;span style="color:#bbb"&gt; &lt;/span&gt;{&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#080;font-style:italic"&gt;// map EOF to sdk.ErrEOF, which is recognized by the Go SDK&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;err&lt;span style="color:#bbb"&gt; &lt;/span&gt;=&lt;span style="color:#bbb"&gt; &lt;/span&gt;sdk.ErrEOF&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;}&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;eventC&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#666"&gt;&amp;lt;-&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;source.PushEvent{Err:&lt;span style="color:#bbb"&gt; &lt;/span&gt;err}&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#080;font-style:italic"&gt;// errors are blocking, so we can stop here&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;return&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;}&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;}&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;}()&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;return&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;source.&lt;span style="color:#00a000"&gt;NewPushInstance&lt;/span&gt;(eventC,&lt;span style="color:#bbb"&gt; &lt;/span&gt;source.&lt;span style="color:#00a000"&gt;WithInstanceClose&lt;/span&gt;(cancel))&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;We'll not describe with details the docker relative part, see the &lt;a href="https://pkg.go.dev/github.com/docker/docker/client"&gt;documentation&lt;/a&gt; of the &lt;code&gt;Docker SDK&lt;/code&gt; for more info. You just have to know it creates a channel to receive the events from the engine and we use same context than the whole plugin.&lt;/p&gt;
&lt;p&gt;Here's the most important things to notice:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;eventC := make(chan source.PushEvent)&lt;/code&gt;: we create a channel, it will be used by the &lt;code&gt;instance&lt;/code&gt; to listen incoming events, we'll push into it the events from the &lt;code&gt;docker client&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ctx, cancel := context.WithCancel(context.Background())&lt;/code&gt;: we create a &lt;code&gt;context&lt;/code&gt;, and more important, a &lt;code&gt;Done channel&lt;/code&gt; for this context&lt;/li&gt;
&lt;li&gt;&lt;code&gt;eventC &amp;lt;- source.PushEvent{Data: bytes}&lt;/code&gt;: this is how to push an event to the &lt;code&gt;instance&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;return source.NewPushInstance(eventC, source.WithInstanceClose(cancel))&lt;/code&gt;: the &lt;code&gt;Open()&lt;/code&gt; method must return a &lt;code&gt;source.Instance&lt;/code&gt;, and &lt;code&gt;source.NewPushInstance()&lt;/code&gt; requires a channel where the events will pushed and may have optional settings, in our case, we pass also the &lt;code&gt;Done channel&lt;/code&gt; of the &lt;code&gt;context&lt;/code&gt; with the &lt;code&gt;source.WithInstanceClose()&lt;/code&gt; function&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Passing to the &lt;code&gt;instance&lt;/code&gt; the same &lt;code&gt;Done channel&lt;/code&gt; than the &lt;code&gt;docker client&lt;/code&gt; uses, allows to correctly stop the plugin when we ask Falco to stop (CTRL+C or &lt;code&gt;systemctl stop falco&lt;/code&gt;).&lt;/p&gt;
&lt;h2 id="build-the-plugin"&gt;Build the plugin&lt;/h2&gt;
&lt;p&gt;The plugin is built as a &lt;code&gt;c-shared&lt;/code&gt; library, it means a &lt;code&gt;.so&lt;/code&gt;:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;go build -buildmode&lt;span style="color:#666"&gt;=&lt;/span&gt;c-shared -o libdocker.so
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;If you use &lt;code&gt;make&lt;/code&gt; from the repository:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;make build
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="installation"&gt;Installation&lt;/h2&gt;
&lt;p&gt;The plugins are commonly installed in &lt;code&gt;/usr/share/falco/plugins&lt;/code&gt;, just move the &lt;code&gt;libdocker.so&lt;/code&gt; you built or run &lt;code&gt;make install&lt;/code&gt;.&lt;/p&gt;
&lt;h2 id="makefile"&gt;Makefile&lt;/h2&gt;
&lt;p&gt;To simplify the build and the installation of the plugin, we can use a Makefile like this one:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#b8860b"&gt;SHELL&lt;/span&gt;&lt;span style="color:#666"&gt;=&lt;/span&gt;/bin/bash -o pipefail
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;GO ?&lt;span style="color:#666"&gt;=&lt;/span&gt; go
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;NAME :&lt;span style="color:#666"&gt;=&lt;/span&gt; docker
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;OUTPUT :&lt;span style="color:#666"&gt;=&lt;/span&gt; lib&lt;span style="color:#a2f;font-weight:bold"&gt;$(&lt;/span&gt;NAME&lt;span style="color:#a2f;font-weight:bold"&gt;)&lt;/span&gt;.so
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;DESTDIR :&lt;span style="color:#666"&gt;=&lt;/span&gt; /usr/share/falco/plugins
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;ifeq &lt;span style="color:#666"&gt;(&lt;/span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;$(&lt;/span&gt;DEBUG&lt;span style="color:#a2f;font-weight:bold"&gt;)&lt;/span&gt;, 1&lt;span style="color:#666"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#b8860b"&gt;GODEBUGFLAGS&lt;/span&gt;&lt;span style="color:#666"&gt;=&lt;/span&gt; &lt;span style="color:#b8860b"&gt;GODEBUG&lt;/span&gt;&lt;span style="color:#666"&gt;=&lt;/span&gt;&lt;span style="color:#b8860b"&gt;cgocheck&lt;/span&gt;&lt;span style="color:#666"&gt;=&lt;/span&gt;&lt;span style="color:#666"&gt;2&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;else&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#b8860b"&gt;GODEBUGFLAGS&lt;/span&gt;&lt;span style="color:#666"&gt;=&lt;/span&gt; &lt;span style="color:#b8860b"&gt;GODEBUG&lt;/span&gt;&lt;span style="color:#666"&gt;=&lt;/span&gt;&lt;span style="color:#b8860b"&gt;cgocheck&lt;/span&gt;&lt;span style="color:#666"&gt;=&lt;/span&gt;&lt;span style="color:#666"&gt;0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;endif
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;all: build
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;clean:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; @rm -f lib&lt;span style="color:#a2f;font-weight:bold"&gt;$(&lt;/span&gt;NAME&lt;span style="color:#a2f;font-weight:bold"&gt;)&lt;/span&gt;.so
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;build: clean
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; @&lt;span style="color:#a2f;font-weight:bold"&gt;$(&lt;/span&gt;GODEBUGFLAGS&lt;span style="color:#a2f;font-weight:bold"&gt;)&lt;/span&gt; &lt;span style="color:#a2f;font-weight:bold"&gt;$(&lt;/span&gt;GO&lt;span style="color:#a2f;font-weight:bold"&gt;)&lt;/span&gt; build -buildmode&lt;span style="color:#666"&gt;=&lt;/span&gt;c-shared -buildvcs&lt;span style="color:#666"&gt;=&lt;/span&gt;&lt;span style="color:#a2f"&gt;false&lt;/span&gt; -o &lt;span style="color:#a2f;font-weight:bold"&gt;$(&lt;/span&gt;OUTPUT&lt;span style="color:#a2f;font-weight:bold"&gt;)&lt;/span&gt; ./plugin
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;install: build
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; mv &lt;span style="color:#a2f;font-weight:bold"&gt;$(&lt;/span&gt;OUTPUT&lt;span style="color:#a2f;font-weight:bold"&gt;)&lt;/span&gt; &lt;span style="color:#a2f;font-weight:bold"&gt;$(&lt;/span&gt;DESTDIR&lt;span style="color:#a2f;font-weight:bold"&gt;)&lt;/span&gt;/
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="card card-sm pageinfo pageinfo-info my-4"&gt;
&lt;div class="card-body"&gt;
&lt;div class="card-text"&gt;
&lt;p&gt;This makefile will work for any plugin, just change the &lt;code&gt;NAME&lt;/code&gt; variable.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id="configuration"&gt;Configuration&lt;/h2&gt;
&lt;p&gt;Now we have our plugin, we must declare it to &lt;code&gt;Falco&lt;/code&gt; in &lt;code&gt;falco.yaml&lt;/code&gt;:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;plugins&lt;/span&gt;:&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;- &lt;span style="color:#008000;font-weight:bold"&gt;name&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;docker&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;library_path&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;/usr/share/falco/plugins/libdocker.so&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;init_config&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#b44"&gt;&amp;#39;{&amp;#34;flushinterval&amp;#34;: 1}&amp;#39;&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;load_plugins&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;[docker]&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;stdout_output&lt;/span&gt;:&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;enabled&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;true&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;For more details about this configuration, see &lt;a href="https://v0-43--falcosecurity.netlify.app/docs/plugins/usage#loading-plugins-in-falco"&gt;how to load and configure a plugin&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id="rules"&gt;Rules&lt;/h2&gt;
&lt;p&gt;We create a simple rule, for checking that the &lt;code&gt;fields&lt;/code&gt; and &lt;code&gt;source&lt;/code&gt; work as expected:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;- &lt;span style="color:#008000;font-weight:bold"&gt;rule&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;Container status changed&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;desc&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;Container status changed&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;condition&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;docker.status in (create,start,die)&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;output&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;status=%docker.status from=%docker.from type=%docker.type action=%docker.action name=%docker.attributes.name&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;priority&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;DEBUG&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;source&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;docker&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;tags&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;[docker]&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="test-and-results"&gt;Test and Results&lt;/h2&gt;
&lt;p&gt;Let's run &lt;code&gt;Falco&lt;/code&gt; with our configuration and rules files:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;falco -c falco.yaml -r rules/docker_rules.yaml
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;17:17:24.008405000: Debug &lt;span style="color:#b8860b"&gt;status&lt;/span&gt;&lt;span style="color:#666"&gt;=&lt;/span&gt;create &lt;span style="color:#b8860b"&gt;from&lt;/span&gt;&lt;span style="color:#666"&gt;=&lt;/span&gt;alpine &lt;span style="color:#b8860b"&gt;type&lt;/span&gt;&lt;span style="color:#666"&gt;=&lt;/span&gt;container &lt;span style="color:#b8860b"&gt;action&lt;/span&gt;&lt;span style="color:#666"&gt;=&lt;/span&gt;create &lt;span style="color:#b8860b"&gt;name&lt;/span&gt;&lt;span style="color:#666"&gt;=&lt;/span&gt;bold_keller
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;17:17:24.008953000: Debug &lt;span style="color:#b8860b"&gt;status&lt;/span&gt;&lt;span style="color:#666"&gt;=&lt;/span&gt;start &lt;span style="color:#b8860b"&gt;from&lt;/span&gt;&lt;span style="color:#666"&gt;=&lt;/span&gt;alpine &lt;span style="color:#b8860b"&gt;type&lt;/span&gt;&lt;span style="color:#666"&gt;=&lt;/span&gt;container &lt;span style="color:#b8860b"&gt;action&lt;/span&gt;&lt;span style="color:#666"&gt;=&lt;/span&gt;start &lt;span style="color:#b8860b"&gt;name&lt;/span&gt;&lt;span style="color:#666"&gt;=&lt;/span&gt;bold_keller
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;17:17:24.009076000: Debug &lt;span style="color:#b8860b"&gt;status&lt;/span&gt;&lt;span style="color:#666"&gt;=&lt;/span&gt;die &lt;span style="color:#b8860b"&gt;from&lt;/span&gt;&lt;span style="color:#666"&gt;=&lt;/span&gt;alpine &lt;span style="color:#b8860b"&gt;type&lt;/span&gt;&lt;span style="color:#666"&gt;=&lt;/span&gt;container &lt;span style="color:#b8860b"&gt;action&lt;/span&gt;&lt;span style="color:#666"&gt;=&lt;/span&gt;die &lt;span style="color:#b8860b"&gt;name&lt;/span&gt;&lt;span style="color:#666"&gt;=&lt;/span&gt;bold_keller
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Events detected: &lt;span style="color:#666"&gt;3&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Rule counts by severity:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; DEBUG: &lt;span style="color:#666"&gt;3&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Triggered rules by rule name:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; Container status changed: &lt;span style="color:#666"&gt;3&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Syscall event drop monitoring:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; - event drop detected: &lt;span style="color:#666"&gt;0&lt;/span&gt; occurrences
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; - num &lt;span style="color:#a2f"&gt;times&lt;/span&gt; actions taken: &lt;span style="color:#666"&gt;0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;It works!&lt;/p&gt;</description></item><item><title>Docs: Falco Is Not Starting Up</title><link>https://v0-43--falcosecurity.netlify.app/docs/troubleshooting/start-up-error/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://v0-43--falcosecurity.netlify.app/docs/troubleshooting/start-up-error/</guid><description>
&lt;h2 id="action-items-tl-dr"&gt;Action Items (TL;DR)&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Read &lt;a href="https://v0-43--falcosecurity.netlify.app/docs/install-operate/"&gt;Install and Operate&lt;/a&gt; Guides and review &lt;a href="https://github.com/falcosecurity/falco/blob/master/falco.yaml"&gt;falco.yaml&lt;/a&gt; and any local configuration file for necessary preconditions.&lt;/li&gt;
&lt;li&gt;Address common startup issues by verifying and correcting config misconceptions.&lt;/li&gt;
&lt;li&gt;Monitor for potential kernel driver bugs, though less frequent.&lt;/li&gt;
&lt;li&gt;Be aware of userspace bugs that can also interfere with Falco startup.&lt;/li&gt;
&lt;li&gt;First, always try running Falco with the default and/or easiest configuration without any plugins.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Let's find out!&lt;/p&gt;
&lt;h2 id="debugging-tips"&gt;Debugging Tips&lt;/h2&gt;
&lt;p&gt;Please acknowledge that The Falco Project performs a wide range of tests and provides pre-built kernel drivers, but perfection is not guaranteed.&lt;/p&gt;
&lt;p&gt;How do I determine if Falco does not start up because of a kernel driver or userspace or pure config issue?&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;When you start Falco, watch the print statements.&lt;/li&gt;
&lt;li&gt;If Falco crashes after passing load config stages, especially during syscall source setup, it signals potential kernel driver issues. These issues may include device unavailability, permission problems, or strange printouts. Alternatively, it could suggest that the kernel driver is not present in the first place, for instance, due to a download failure or missing mounts.&lt;/li&gt;
&lt;li&gt;If Falco started up, but then crashed after, it's likely a genuine bug somewhere, we would have to find out.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="kernel-drivers"&gt;Kernel Drivers&lt;/h3&gt;
&lt;p&gt;Falco kernel driver issues are the most common source of frustrating errors.
Please note that since Falco 0.38.0, &lt;code&gt;modern_ebpf&lt;/code&gt; driver is the new default driver, and it will be automatically used wherever is supported; this should help mitigate most of the following issues.
Here are a few tips to demystify what can go wrong with respect to Falco's kernel drivers:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Check if all preconditions to start up the kernel drivers are met. Common issues include:
&lt;ul&gt;
&lt;li&gt;For &lt;code&gt;ebpf&lt;/code&gt; based drivers, the &lt;code&gt;bpf&lt;/code&gt; syscall needs to be allowed and not blocked by SELinux or similar.&lt;/li&gt;
&lt;li&gt;Ensure the DKMS package is installed for the &lt;code&gt;kmod&lt;/code&gt; driver, and your system may require custom-signed kernel modules. Also, verify the availability of the host &lt;code&gt;/dev&lt;/code&gt; mount (e.g. &lt;code&gt;/dev:/host/dev&lt;/code&gt; when running Falco over a container).&lt;/li&gt;
&lt;li&gt;In general, check that Falco has all host mounts when running from a container or as a daemonset in Kubernetes. Critical mounts for running Falco, assuming the kernel driver is available, include: &lt;code&gt;/etc:/host/etc&lt;/code&gt;, &lt;code&gt;/proc:/host/proc&lt;/code&gt;, &lt;code&gt;/boot:/host/boot&lt;/code&gt;, &lt;code&gt;/dev:/host/dev&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;For &lt;code&gt;ebpf&lt;/code&gt; and &lt;code&gt;kmod&lt;/code&gt; drivers, the kernel object code needs to be available for the exact kernel release (&lt;code&gt;uname -r&lt;/code&gt;) of your system. This invites a wide range of possible issues:
&lt;ul&gt;
&lt;li&gt;If you use the Falco open source binary on Linux distributions such as stock Ubuntu, Fedora, Debian, Arch Linux, Oracle Linux, Rocky Linux, AlmaLinux, etc., you may encounter an issue if the pre-built kernel driver from The Falco Project is not available for download. Verify on the &lt;a href="https://download.falco.org/driver/site/index.html"&gt;Driver Index&lt;/a&gt; page if the driver is available for your specific OS and kernel.&lt;/li&gt;
&lt;li&gt;Your network ACLs may be blocking the download.&lt;/li&gt;
&lt;li&gt;In case the download fails, building the driver on the fly (over the init container in Kubernetes, for example) can fail for many reasons.&lt;/li&gt;
&lt;li&gt;Lastly, if you run a custom kernel, you'll need to build your own drivers (&lt;code&gt;ebpf&lt;/code&gt; or &lt;code&gt;kmod&lt;/code&gt; only) or explore the option of using the &lt;code&gt;modern_ebpf&lt;/code&gt; driver if applicable.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;If your kernel version is &amp;gt;= 5.8 and you are enforcing either &lt;code&gt;kmod&lt;/code&gt; or &lt;code&gt;ebpf&lt;/code&gt; driver, consider switching to the &lt;code&gt;modern_ebpf&lt;/code&gt; driver. It's bundled into the userspace binary and works out of the box, regardless of the kernel release, thanks to the eBPF feature called 'Compile Once Run Everywhere' (CO-RE).&lt;/li&gt;
&lt;li&gt;If you are using the &lt;code&gt;ebpf&lt;/code&gt; or &lt;code&gt;modern_ebpf&lt;/code&gt; driver and encounter verbose and lengthy instruction printouts, you may have encountered a dreaded eBPF verifier failure. In such cases, kindly reach out to the Falco maintainers, providing the kernel release (&lt;code&gt;uname -r&lt;/code&gt;). Resolving such instances involves modifying the driver code to ensure the eBPF verifier is happy again.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="userspace"&gt;Userspace&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Errors associated with Falco's rules or configurations are generally more understandable, and we provide warnings with clear instructions.&lt;/li&gt;
&lt;li&gt;Historically, we have encountered edge case bugs with some newer features. Please bear with us in such cases, and we typically release patches to address them.&lt;/li&gt;
&lt;li&gt;In the past, there have been instances where regressions were introduced, and certain configurations or combinations thereof may exhibit unexpected behavior. However, Falco's core functionality undergoes comprehensive testing, and we are committed to ensuring its continued reliability.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="restarts"&gt;Restarts&lt;/h3&gt;
&lt;p&gt;Falco is a C/C++ application for performance reasons, and as such, it is not unheard of for Falco to crash and restart in some rare code paths or edge case conditions. However, if you deploy Falco with resource limits, for example the OOM killer can also kill the process and force a restart. Read more in the &lt;a href="https://v0-43--falcosecurity.netlify.app/docs/metrics/performance/"&gt;Falco Performance&lt;/a&gt; Guide.&lt;/p&gt;
&lt;h3 id="references-and-community-discussions"&gt;References and Community Discussions&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/falcosecurity/falco/issues/2873"&gt;[UMBRELLA] Errors at Falco start-up related to Falco's kernel driver {kmod, ebpf, modern_ebpf}&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://v0-43--falcosecurity.netlify.app/docs/metrics/performance/"&gt;Falco Performance&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://download.falco.org/driver/site/index.html"&gt;Driver Index&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>Docs: Glossary</title><link>https://v0-43--falcosecurity.netlify.app/docs/reference/glossary/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://v0-43--falcosecurity.netlify.app/docs/reference/glossary/</guid><description/></item><item><title>Docs: Rule fields</title><link>https://v0-43--falcosecurity.netlify.app/docs/reference/rules/rule-fields/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://v0-43--falcosecurity.netlify.app/docs/reference/rules/rule-fields/</guid><description>
&lt;p&gt;A Falco rule can contain the following keys:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style="text-align: left"&gt;Key&lt;/th&gt;
&lt;th style="text-align: center"&gt;Required&lt;/th&gt;
&lt;th style="text-align: left"&gt;Description&lt;/th&gt;
&lt;th style="text-align: center"&gt;Default&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;rule&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: center"&gt;yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;A short, unique name for the rule.&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;condition&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: center"&gt;yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;A filtering expression that is applied against events to check whether they match the rule.&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;desc&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: center"&gt;yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;A longer description of what the rule detects.&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;output&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: center"&gt;yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;Specifies the message that should be output if a matching event occurs. See &lt;a href="https://v0-43--falcosecurity.netlify.app/docs/rules/basic-elements/#output"&gt;output&lt;/a&gt;.&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;priority&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: center"&gt;yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;A case-insensitive representation of the severity of the event. Should be one of the following: &lt;code&gt;emergency&lt;/code&gt;, &lt;code&gt;alert&lt;/code&gt;, &lt;code&gt;critical&lt;/code&gt;, &lt;code&gt;error&lt;/code&gt;, &lt;code&gt;warning&lt;/code&gt;, &lt;code&gt;notice&lt;/code&gt;, &lt;code&gt;informational&lt;/code&gt;, &lt;code&gt;debug&lt;/code&gt;.&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;exceptions&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: center"&gt;no&lt;/td&gt;
&lt;td style="text-align: left"&gt;A set of &lt;a href="https://v0-43--falcosecurity.netlify.app/docs/rules/exceptions/"&gt;exceptions&lt;/a&gt; that cause the rule to not generate an alert.&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;enabled&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: center"&gt;no&lt;/td&gt;
&lt;td style="text-align: left"&gt;If set to &lt;code&gt;false&lt;/code&gt;, a rule is neither loaded nor matched against any events.&lt;/td&gt;
&lt;td style="text-align: center"&gt;&lt;code&gt;true&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;tags&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: center"&gt;no&lt;/td&gt;
&lt;td style="text-align: left"&gt;A list of tags applied to the rule (more on this &lt;a href="https://v0-43--falcosecurity.netlify.app/docs/rules/controlling-rules/#tags"&gt;below&lt;/a&gt;).&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;warn_evttypes&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: center"&gt;no&lt;/td&gt;
&lt;td style="text-align: left"&gt;If set to &lt;code&gt;false&lt;/code&gt;, Falco suppresses warnings related to a rule not having an event type (more on this &lt;a href="https://v0-43--falcosecurity.netlify.app/docs/rules/style-guide/#condition-syntax"&gt;below&lt;/a&gt;).&lt;/td&gt;
&lt;td style="text-align: center"&gt;&lt;code&gt;true&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;skip-if-unknown-filter&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: center"&gt;no&lt;/td&gt;
&lt;td style="text-align: left"&gt;If set to &lt;code&gt;true&lt;/code&gt;, if a rule conditions contains a filtercheck, e.g. &lt;code&gt;fd.some_new_field&lt;/code&gt;, that is not known to this version of Falco, Falco silently accepts the rule but does not execute it; if set to &lt;code&gt;false&lt;/code&gt;, Falco reports an error and exists when finding an unknown filtercheck.&lt;/td&gt;
&lt;td style="text-align: center"&gt;&lt;code&gt;false&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;source&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: center"&gt;no&lt;/td&gt;
&lt;td style="text-align: left"&gt;The event source for which this rule should be evaluated. Typical values are &lt;code&gt;syscall&lt;/code&gt;, &lt;code&gt;k8s_audit&lt;/code&gt;, or the source advertised by a source &lt;a href="https://v0-43--falcosecurity.netlify.app/docs/plugins/"&gt;plugin&lt;/a&gt;.&lt;/td&gt;
&lt;td style="text-align: center"&gt;&lt;code&gt;syscall&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;append&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: center"&gt;no&lt;/td&gt;
&lt;td style="text-align: left"&gt;When set to &lt;code&gt;true&lt;/code&gt;, it adds conditions and/or exceptions to a previously defined rule or macro instead of overseeding it. Not used when the goal is just to enable an already existing rule. In case of appending to a list, it adds new elements to it.&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;</description></item><item><title>Docs: Try Falco with Docker</title><link>https://v0-43--falcosecurity.netlify.app/docs/getting-started/falco-docker-quickstart/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://v0-43--falcosecurity.netlify.app/docs/getting-started/falco-docker-quickstart/</guid><description>
&lt;h2 id="install-falco"&gt;Install Falco&lt;/h2&gt;
&lt;p&gt;First, ensure you have a Linux machine with a recent version of Docker installed. Note that the following will not work on Windows or macOS running Docker Desktop.&lt;/p&gt;
&lt;p&gt;Run the following command:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;docker run --rm -it &lt;span style="color:#b62;font-weight:bold"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; --name falco &lt;span style="color:#b62;font-weight:bold"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; --privileged &lt;span style="color:#b62;font-weight:bold"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; -v /sys/kernel/tracing:/sys/kernel/tracing:ro &lt;span style="color:#b62;font-weight:bold"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; -v /var/run/docker.sock:/host/var/run/docker.sock &lt;span style="color:#b62;font-weight:bold"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; -v /proc:/host/proc:ro &lt;span style="color:#b62;font-weight:bold"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; -v /etc:/host/etc:ro &lt;span style="color:#b62;font-weight:bold"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; falcosecurity/falco:0.43.0
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Falco is now monitoring your system using the &lt;a href="https://github.com/falcosecurity/rules/blob/main/rules/falco_rules.yaml"&gt;pre-installed set of rules&lt;/a&gt; that alert you upon suspicious behavior.&lt;/p&gt;
&lt;h2 id="trigger-a-rule"&gt;Trigger a rule&lt;/h2&gt;
&lt;p&gt;Open another terminal on the same machine and run:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo cat /etc/shadow
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Now go back to Falco, and you'll see a message like:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;2024-06-21T08:54:23.812791015+0000: Warning Sensitive file opened for reading by non-trusted program (file=/etc/shadow gparent=sudo ggparent=bash gggparent=tmux: evt_type=openat user=root user_uid=0 user_loginuid=1000 process=cat proc_exepath=/usr/bin/cat parent=sudo command=cat /etc/shadow terminal=34826 container_id=host container_name=host)
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;This is your first Falco event 🦅! If you are curious, &lt;a href="https://github.com/falcosecurity/rules/blob/c0a9bf17d5451340ab8a497efae1b8a8bd95adcb/rules/falco_rules.yaml#L398"&gt;this&lt;/a&gt; is the rule that describes it.&lt;/p&gt;
&lt;h2 id="create-a-custom-rule"&gt;Create a custom rule&lt;/h2&gt;
&lt;p&gt;Now it's time to create our own rule and load it into Falco. We can be pretty creative with them, but let's stick with something simple. This time, we want to be alerted when any file is opened for writing in the &lt;code&gt;/etc&lt;/code&gt; directory, either on the host or inside containers.&lt;/p&gt;
&lt;p&gt;Stop the Falco container with &lt;code&gt;Ctrl-C&lt;/code&gt;, copy the following text in a file and call it &lt;code&gt;falco_custom_rules.yaml&lt;/code&gt;:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;- &lt;span style="color:#008000;font-weight:bold"&gt;rule&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;Write below etc&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;desc&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;An attempt to write to /etc directory&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;condition&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;&amp;gt;&lt;span style="color:#b44;font-style:italic"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#b44;font-style:italic"&gt; (evt.type in (open,openat,openat2) and evt.is_open_write=true and fd.typechar=&amp;#39;f&amp;#39; and fd.num&amp;gt;=0)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#b44;font-style:italic"&gt; and fd.name startswith /etc&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;output&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#b44"&gt;&amp;#34;File below /etc opened for writing | file=%fd.name pcmdline=%proc.pcmdline gparent=%proc.aname[2] ggparent=%proc.aname[3] gggparent=%proc.aname[4] evt_type=%evt.type user=%user.name user_uid=%user.uid user_loginuid=%user.loginuid process=%proc.name proc_exepath=%proc.exepath parent=%proc.pname command=%proc.cmdline terminal=%proc.tty&amp;#34;&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;priority&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;WARNING&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;tags&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;[filesystem, mitre_persistence]&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Then start Falco again, this time mounting the new rule file:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;docker run --rm -it &lt;span style="color:#b62;font-weight:bold"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; --name falco &lt;span style="color:#b62;font-weight:bold"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; --privileged &lt;span style="color:#b62;font-weight:bold"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; -v /sys/kernel/tracing:/sys/kernel/tracing:ro &lt;span style="color:#b62;font-weight:bold"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; -v /var/run/docker.sock:/host/var/run/docker.sock &lt;span style="color:#b62;font-weight:bold"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; -v /proc:/host/proc:ro &lt;span style="color:#b62;font-weight:bold"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; -v /etc:/host/etc:ro &lt;span style="color:#b62;font-weight:bold"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; -v &lt;span style="color:#a2f;font-weight:bold"&gt;$(&lt;/span&gt;&lt;span style="color:#a2f"&gt;pwd&lt;/span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;)&lt;/span&gt;/falco_custom_rules.yaml:/etc/falco/falco_rules.local.yaml &lt;span style="color:#b62;font-weight:bold"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; falcosecurity/falco:0.43.0
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Finally, open another terminal and write a file in &lt;code&gt;/etc&lt;/code&gt;:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo touch /etc/test_file_falco_rule
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;You should see an alert in the Falco terminal, just as before. As you can see, a lot of contextual information is displayed, as it was specified in the &lt;code&gt;output&lt;/code&gt; field of the rule. There are many such fields that you can use both in the condition and the output to build your rule.&lt;/p&gt;</description></item><item><title>Docs: Plugins SDKs</title><link>https://v0-43--falcosecurity.netlify.app/docs/developer-guide/plugins/sdks/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://v0-43--falcosecurity.netlify.app/docs/developer-guide/plugins/sdks/</guid><description>
&lt;h2 id="plugins-sdks"&gt;Plugins SDKs&lt;/h2&gt;
&lt;p&gt;To facilitate the development of plugins, The Falco Project provides SDKs for multiple programming languages: Go, C++, and Rust. These SDKs provide flexibility for developers to choose the programming language they are most comfortable with while ensuring a consistent and streamlined experience when building Falco plugins.&lt;/p&gt;
&lt;h3 id="c-sdk"&gt;C++ SDK&lt;/h3&gt;
&lt;p&gt;The &lt;a href="https://github.com/falcosecurity/plugin-sdk-cpp"&gt;C++ SDK&lt;/a&gt; provides abstract base classes for plugin development. Plugin authors can derive from these base classes and implement abstract methods to:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Supply plugin metadata and capabilities.&lt;/li&gt;
&lt;li&gt;Provide events.&lt;/li&gt;
&lt;li&gt;Extract fields from events.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="go-sdk"&gt;Go SDK&lt;/h3&gt;
&lt;p&gt;We offer a &lt;a href="https://github.com/falcosecurity/plugin-sdk-go"&gt;Go SDK&lt;/a&gt; that simplifies plugin development by providing support code and abstractions. This SDK includes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Go structs and enums corresponding to the C structs and enums used by the plugin API.&lt;/li&gt;
&lt;li&gt;Utility packages to handle memory management and type conversions.&lt;/li&gt;
&lt;li&gt;Abstract interfaces that provide a streamlined and user-friendly way to implement plugins.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;For a detailed explanation of the architecture and usage of the Go SDK, refer to the &lt;a href="https://v0-43--falcosecurity.netlify.app/docs/plugins/go-sdk-walkthrough"&gt;Go SDK walkthrough section&lt;/a&gt;.&lt;/p&gt;
&lt;h3 id="rust-sdk"&gt;Rust SDK&lt;/h3&gt;
&lt;p&gt;We recently introduced a &lt;a href="https://github.com/falcosecurity/plugin-sdk-rs"&gt;Rust SDK&lt;/a&gt;, enabling developers to write plugins in Rust. The Rust SDK offers a safe, idiomatic interface for interacting with the Falco plugin API while leveraging Rust’s strong type system and memory safety guarantees.&lt;/p&gt;</description></item><item><title>Docs: Falco Plugins API Reference</title><link>https://v0-43--falcosecurity.netlify.app/docs/reference/plugins/plugin-api-reference/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://v0-43--falcosecurity.netlify.app/docs/reference/plugins/plugin-api-reference/</guid><description>
&lt;h2 id="introduction"&gt;Introduction&lt;/h2&gt;
&lt;p&gt;This page documents the functions that make up the Falco plugins API. In most cases, you will not need to implement these functions directly. There are &lt;a href="https://github.com/falcosecurity/plugin-sdk-go"&gt;Go&lt;/a&gt; and &lt;a href="https://github.com/falcosecurity/plugin-sdk-cpp"&gt;C++&lt;/a&gt; SDKs that provide an easier-to-use interface for plugin authors.&lt;/p&gt;
&lt;p&gt;At a high level, the API functions are grouped as follows:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Functions that are commons to all plugins&lt;/li&gt;
&lt;li&gt;Functions that implement one specific capability&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The C header files &lt;a href="https://github.com/falcosecurity/libs/blob/0.17.2/userspace/plugin/plugin_types.h"&gt;plugin_api.h&lt;/a&gt; numerate all the API functions and associated structs/types as they are used by the plugins framework. The whole plugin API and the loader used in Falco are implemented in C in a standalone module located inside &lt;a href="https://github.com/falcosecurity/libs/tree/master/userspace/plugin"&gt;falcosecurity/libs/userspace/plugin&lt;/a&gt;, and can be imported and reused in other projects using the falcosecurity plugin system (e.g. we have a &lt;a href="https://github.com/falcosecurity/plugin-sdk-go/tree/main/pkg/loader"&gt;plugin loader written in Go&lt;/a&gt; developed on top of the C one).&lt;/p&gt;
&lt;p&gt;Remember, however, that from the perspective of the plugin, each function name has a prefix &lt;code&gt;plugin_&lt;/code&gt; e.g. &lt;code&gt;plugin_get_required_api_version&lt;/code&gt;, &lt;code&gt;plugin_get_name&lt;/code&gt;, etc.&lt;/p&gt;
&lt;p&gt;Since &lt;a href="https://v0-43--falcosecurity.netlify.app/blog/falco-0-33-0/"&gt;Falco v0.33.0&lt;/a&gt;, some function symbols of &lt;strong&gt;the plugin API started supporting concurrent invocations&lt;/strong&gt; from multiple threads. If not explicitly specified in each symbol's API reference, the plugin API assumes that functions are invoked always from the same thread with no concurrency.&lt;/p&gt;
&lt;h3 id="plugin-api-versioning"&gt;Plugin API Versioning&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;The current version of the plugin API is &lt;code&gt;3.6.0&lt;/code&gt;&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;The plugin API is a formal contract between the framework and the plugins, and it is versioned using &lt;a href="https://semver.org/"&gt;semantic versioning&lt;/a&gt;. The framework exposes the plugin API version it supports, and each plugin expresses a required plugin API version. If the version required by a plugin does not pass the semantic check with the one supported by the framework, then the plugin cannot be loaded. See the section about &lt;a href="https://v0-43--falcosecurity.netlify.app/docs/reference/plugins/plugin-api-reference/#get-required-api-version"&gt;&lt;code&gt;plugin_get_required_api_version&lt;/code&gt;&lt;/a&gt; for more details.&lt;/p&gt;
&lt;h3 id="conventions"&gt;Conventions&lt;/h3&gt;
&lt;p&gt;The following conventions apply for all of the below API functions:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Every function that returns a &lt;code&gt;const char* &lt;/code&gt; must return a null-terminated C string.&lt;/li&gt;
&lt;li&gt;All string values returned across the API are considered owned by the plugin and must remain valid for use by the plugin framework. Specifically, this means:
&lt;ul&gt;
&lt;li&gt;For demographic functions like &lt;code&gt;plugin_get_name&lt;/code&gt;, &lt;code&gt;plugin_get_description&lt;/code&gt;, the returned strings must remain valid until the plugin is destroyed.&lt;/li&gt;
&lt;li&gt;When returning events via &lt;code&gt;plugin_next_batch&lt;/code&gt;, both the array of structs and the data payloads inside each struct must remain valid until the next call to &lt;code&gt;plugin_next_batch&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;When returning extracted string values via &lt;code&gt;plugin_extract_fields&lt;/code&gt;, every extracted string must remain valid until the next call to &lt;code&gt;plugin_extract_fields&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;For every function that returns an error, the plugin should save a meaningful error string that the framework can retrieve via a call to &lt;code&gt;plugin_get_last_error&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="inversion-of-control-and-callbacks-to-the-plugin-s-owner"&gt;Inversion of Control and Callbacks to the Plugin's Owner&lt;/h2&gt;
&lt;p&gt;All functions from the plugin API define functionalities that the plugin offers to the framework. In the default execution path, the plugin is always the &amp;quot;passive&amp;quot; actor, with the framework being the orchestrator determining when and how often a given plugin function gets invoked.&lt;/p&gt;
&lt;p&gt;The plugin API also supports an occasional inversion of control in which plugins can actively invoke functions exposed by the framework that owns it. For those cases, the execution flow generally proceeds as follows. First, the framework invokes a function exported by the plugin according its supported version of the plugin API. As one of the function arguments the framework passes to the plugin a vtable struct allocated and owned by the framework itself, containing one or more function pointers referring to code functions of the framework that the plugin is allowed to invoke. Permissions about retaining such function pointers inside the plugin's state after the execution of the plugin API symbol may vary depending on the API symbol itself and its related capabilities. Alongside the function pointers, the framework also provides the plugin with a &lt;code&gt;ss_plugin_owner_t*&lt;/code&gt; opaque handle, which the plugin must pass to the framework's functions. The opaque handle represents an instance of the plugin's &lt;em&gt;owner&lt;/em&gt;, which is an abstract component that the framework allocates for managing the plugin's requests. If the framework passes one of the function pointers defined in the vtable structs as &lt;code&gt;NULL&lt;/code&gt;, then the plugin must assume that the related piece of functionality is not supported by the framework in that context. Plugins must always check whether the function pointers passed by the framework are &lt;code&gt;NULL&lt;/code&gt; or not.&lt;/p&gt;
&lt;p&gt;An example of functionality provided in the form of inversion of control is the access to &lt;a href="https://v0-43--falcosecurity.netlify.app/docs/reference/plugins/plugin-api-reference/#state-tables-api"&gt;state tables&lt;/a&gt;. The C++ example below shows how a plugin can interact with its owner during the execution of its &lt;code&gt;init&lt;/code&gt; function. In this case, the plugin iterates over the list of state tables registered in the framework and catches errors arising during the invocations of the owner's callbacks:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-CPP" data-lang="CPP"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;extern&lt;/span&gt; &lt;span style="color:#b44"&gt;&amp;#34;C&amp;#34;&lt;/span&gt; ss_plugin_t&lt;span style="color:#666"&gt;*&lt;/span&gt; plugin_init(&lt;span style="color:#a2f;font-weight:bold"&gt;const&lt;/span&gt; ss_plugin_init_input&lt;span style="color:#666"&gt;*&lt;/span&gt; in, ss_plugin_rc&lt;span style="color:#666"&gt;*&lt;/span&gt; rc)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#666"&gt;*&lt;/span&gt;rc &lt;span style="color:#666"&gt;=&lt;/span&gt; SS_PLUGIN_SUCCESS;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; my_plugin &lt;span style="color:#666"&gt;*&lt;/span&gt;ret &lt;span style="color:#666"&gt;=&lt;/span&gt; &lt;span style="color:#a2f;font-weight:bold"&gt;new&lt;/span&gt; my_plugin();
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#a2f;font-weight:bold"&gt;if&lt;/span&gt; (&lt;span style="color:#666"&gt;!&lt;/span&gt;in &lt;span style="color:#666"&gt;||&lt;/span&gt; &lt;span style="color:#666"&gt;!&lt;/span&gt;in&lt;span style="color:#666"&gt;-&amp;gt;&lt;/span&gt;tables)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#666"&gt;*&lt;/span&gt;rc &lt;span style="color:#666"&gt;=&lt;/span&gt; SS_PLUGIN_FAILURE;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; ret&lt;span style="color:#666"&gt;-&amp;gt;&lt;/span&gt;lasterr &lt;span style="color:#666"&gt;=&lt;/span&gt; &lt;span style="color:#b44"&gt;&amp;#34;access to the state tables is not supported by the owner&amp;#34;&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#a2f;font-weight:bold"&gt;return&lt;/span&gt; ret;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#0b0;font-weight:bold"&gt;uint32_t&lt;/span&gt; ntables &lt;span style="color:#666"&gt;=&lt;/span&gt; &lt;span style="color:#666"&gt;0&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#a2f;font-weight:bold"&gt;auto&lt;/span&gt; tables &lt;span style="color:#666"&gt;=&lt;/span&gt; in&lt;span style="color:#666"&gt;-&amp;gt;&lt;/span&gt;tables&lt;span style="color:#666"&gt;-&amp;gt;&lt;/span&gt;list_tables(in&lt;span style="color:#666"&gt;-&amp;gt;&lt;/span&gt;owner, &lt;span style="color:#666"&gt;&amp;amp;&lt;/span&gt;ntables);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#a2f;font-weight:bold"&gt;if&lt;/span&gt; (&lt;span style="color:#666"&gt;!&lt;/span&gt;tables)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#666"&gt;*&lt;/span&gt;rc &lt;span style="color:#666"&gt;=&lt;/span&gt; SS_PLUGIN_FAILURE;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; ret&lt;span style="color:#666"&gt;-&amp;gt;&lt;/span&gt;lasterr &lt;span style="color:#666"&gt;=&lt;/span&gt; &lt;span style="color:#b44"&gt;&amp;#34;can&amp;#39;t list state tables: &amp;#34;&lt;/span&gt; &lt;span style="color:#666"&gt;+&lt;/span&gt; std&lt;span style="color:#666"&gt;::&lt;/span&gt;string(in&lt;span style="color:#666"&gt;-&amp;gt;&lt;/span&gt;get_owner_last_error(in&lt;span style="color:#666"&gt;-&amp;gt;&lt;/span&gt;owner));
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#a2f;font-weight:bold"&gt;return&lt;/span&gt; ret;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#a2f;font-weight:bold"&gt;for&lt;/span&gt; (&lt;span style="color:#0b0;font-weight:bold"&gt;uint32_t&lt;/span&gt; i &lt;span style="color:#666"&gt;=&lt;/span&gt; &lt;span style="color:#666"&gt;0&lt;/span&gt;; i &lt;span style="color:#666"&gt;&amp;lt;&lt;/span&gt; ntables; i&lt;span style="color:#666"&gt;++&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#a2f;font-weight:bold"&gt;auto&lt;/span&gt;&lt;span style="color:#666"&gt;&amp;amp;&lt;/span&gt; ti &lt;span style="color:#666"&gt;=&lt;/span&gt; tables[i];
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; printf(&lt;span style="color:#b44"&gt;&amp;#34;table=&amp;#39;%s&amp;#39;, key_type=%d&lt;/span&gt;&lt;span style="color:#b62;font-weight:bold"&gt;\n&lt;/span&gt;&lt;span style="color:#b44"&gt;&amp;#34;&lt;/span&gt;, ti.name, ti.key_type);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#a2f;font-weight:bold"&gt;return&lt;/span&gt; ret;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="logging"&gt;Logging&lt;/h3&gt;
&lt;p&gt;Another functionality that makes use of inversion of control is &lt;strong&gt;logging&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;The framework provides a log function during the plugin initialization, which the plugin can use to invoke the framework-provided logger at any time during the plugin life-cycle.&lt;/p&gt;
&lt;p&gt;The following C++ example shows how a plugin can retain the owner's handle and the log function to invert control and invoke the framework logger:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-CPP" data-lang="CPP"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;struct&lt;/span&gt; &lt;span style="color:#00f"&gt;my_plugin&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; ss_plugin_owner_t&lt;span style="color:#666"&gt;*&lt;/span&gt; owner;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; ss_plugin_log_fn_t log;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;};
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;extern&lt;/span&gt; &lt;span style="color:#b44"&gt;&amp;#34;C&amp;#34;&lt;/span&gt; ss_plugin_t&lt;span style="color:#666"&gt;*&lt;/span&gt; plugin_init(&lt;span style="color:#a2f;font-weight:bold"&gt;const&lt;/span&gt; ss_plugin_init_input&lt;span style="color:#666"&gt;*&lt;/span&gt; in, ss_plugin_rc&lt;span style="color:#666"&gt;*&lt;/span&gt; rc)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#666"&gt;*&lt;/span&gt;rc &lt;span style="color:#666"&gt;=&lt;/span&gt; SS_PLUGIN_SUCCESS;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; my_plugin &lt;span style="color:#666"&gt;*&lt;/span&gt;ret &lt;span style="color:#666"&gt;=&lt;/span&gt; &lt;span style="color:#a2f;font-weight:bold"&gt;new&lt;/span&gt; my_plugin();
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; ret&lt;span style="color:#666"&gt;-&amp;gt;&lt;/span&gt;log &lt;span style="color:#666"&gt;=&lt;/span&gt; in&lt;span style="color:#666"&gt;-&amp;gt;&lt;/span&gt;log_fn;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; ret&lt;span style="color:#666"&gt;-&amp;gt;&lt;/span&gt;owner &lt;span style="color:#666"&gt;=&lt;/span&gt; in&lt;span style="color:#666"&gt;-&amp;gt;&lt;/span&gt;owner;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; ret&lt;span style="color:#666"&gt;-&amp;gt;&lt;/span&gt;log(ret&lt;span style="color:#666"&gt;-&amp;gt;&lt;/span&gt;owner, &lt;span style="color:#a2f"&gt;NULL&lt;/span&gt;, &lt;span style="color:#b44"&gt;&amp;#34;initializing plugin...&amp;#34;&lt;/span&gt;, SS_PLUGIN_LOG_SEV_INFO);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#a2f;font-weight:bold"&gt;return&lt;/span&gt; ret;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;extern&lt;/span&gt; &lt;span style="color:#b44"&gt;&amp;#34;C&amp;#34;&lt;/span&gt; &lt;span style="color:#0b0;font-weight:bold"&gt;void&lt;/span&gt; plugin_destroy(ss_plugin_t&lt;span style="color:#666"&gt;*&lt;/span&gt; s)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; my_plugin &lt;span style="color:#666"&gt;*&lt;/span&gt;ps &lt;span style="color:#666"&gt;=&lt;/span&gt; (my_plugin &lt;span style="color:#666"&gt;*&lt;/span&gt;) s;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; ps&lt;span style="color:#666"&gt;-&amp;gt;&lt;/span&gt;log(ps&lt;span style="color:#666"&gt;-&amp;gt;&lt;/span&gt;owner, &lt;span style="color:#a2f"&gt;NULL&lt;/span&gt;, &lt;span style="color:#b44"&gt;&amp;#34;destroying plugin...&amp;#34;&lt;/span&gt;, SS_PLUGIN_LOG_SEV_INFO);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#a2f;font-weight:bold"&gt;delete&lt;/span&gt; ((my_plugin &lt;span style="color:#666"&gt;*&lt;/span&gt;) s);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The signature of the log function is:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;void log(ss_plugin_owner_t* owner, const char* component, const char* msg, ss_plugin_log_severity sev);
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;where &lt;code&gt;owner&lt;/code&gt; is the handle of the owner, &lt;code&gt;component&lt;/code&gt; is a string representing the plugin's component name that is invoking the logger (falls back to the plugin name when &lt;code&gt;NULL&lt;/code&gt;), &lt;code&gt;msg&lt;/code&gt; is the log message and &lt;code&gt;sev&lt;/code&gt; is the log &lt;a href="https://github.com/falcosecurity/libs/blob/0.17.2/userspace/plugin/plugin_types.h#L285-L296"&gt;severity&lt;/a&gt; as defined in API.&lt;/p&gt;
&lt;h2 id="common-plugin-api"&gt;Common Plugin API&lt;/h2&gt;
&lt;h3 id="get-required-api-version"&gt;get_required_api_version&lt;/h3&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;const char* plugin_get_required_api_version() [Required: yes]
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;This function returns a string containing a &lt;a href="https://semver.org/"&gt;semver&lt;/a&gt; version number e.g. &amp;quot;3.0.0&amp;quot;, reflecting the version of the plugin API framework that this plugin requires. This is different than the version of the plugin itself, and should only have to change when the plugin API changes.&lt;/p&gt;
&lt;p&gt;This is the first function the framework calls when loading a plugin. If the returned value is not semver-compatible with the version of the plugin API framework, the plugin will not be loaded.&lt;/p&gt;
&lt;p&gt;For example, if the code implementing the plugin framework has version 1.1.0, and a plugin's &lt;code&gt;plugin_get_required_api_version&lt;/code&gt; function returns 1.0.0, the plugin API is compatible and the plugin will be loaded. If the code implementing the plugin framework has version 3.0.0, and a plugin's &lt;code&gt;plugin_get_required_api_version&lt;/code&gt; function returns 1.0.0, the API is not compatible and the plugin will not be loaded.&lt;/p&gt;
&lt;h3 id="get-name-description-contact-version"&gt;get_{name,description,contact,version}&lt;/h3&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;const char* plugin_get_name() [Required: yes]
const char* plugin_get_description() [Required: yes]
const char* plugin_get_contact() [Required: yes]
const char* plugin_get_version() [Required: yes]
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;These functions all return an C string, with memory owned by the plugin, that describe the plugin:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;plugin_get_name&lt;/code&gt;: Return the name of the plugin.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;plugin_get_description&lt;/code&gt;: Return a short description of the plugin.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;plugin_get_contact&lt;/code&gt;: Return a contact url/email/twitter account for the plugin authors.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;plugin_get_version&lt;/code&gt;: Return the version of the plugin itself.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;For &lt;code&gt;get_version&lt;/code&gt;, note that increasing the major version signals breaking changes in the plugin implementation but must not change the serialization format of the event data. For example, events written in pre-existing capture files must always be readable by newer versions of the plugin.&lt;/p&gt;
&lt;h3 id="init"&gt;init&lt;/h3&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;ss_plugin_t* plugin_init(const ss_plugin_init_input *input, ss_plugin_rc *rc) [Required: yes]
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;This function passes plugin-level configuration to the plugin to create its plugin-level state. The plugin then returns a pointer to that state, as a &lt;code&gt;ss_plugin_t *&lt;/code&gt; handle. The handle is never examined by the plugin framework and is never freed. It is only provided as the argument to later API functions.&lt;/p&gt;
&lt;p&gt;When managing plugin-level state, keep the following in mind:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;It is the plugin's responsibility to allocate plugin state (memory, open files, etc) and free that state later in &lt;code&gt;plugin_destroy&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;The plugin state should be the &lt;em&gt;only&lt;/em&gt; location for state (e.g. no globals, no per-thread state). Although unlikely, the framework may choose to call &lt;code&gt;plugin_init&lt;/code&gt; multiple times for the same plugin, and this should be supported by the plugin.&lt;/li&gt;
&lt;li&gt;The returned rc value should be &lt;code&gt;SS_PLUGIN_SUCCESS&lt;/code&gt; (0) on success, &lt;code&gt;SS_PLUGIN_FAILURE&lt;/code&gt; (1) on failure.&lt;/li&gt;
&lt;li&gt;On failure, make sure to return a meaningful error message in the next call to &lt;code&gt;plugin_get_last_error&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;On failure, plugins can decide whether to return an allocated state or not. In the first case, the plugin framework will use the allocated state to retrieve the failure error with &lt;code&gt;plugin_get_last_error&lt;/code&gt;, and will then free the state with &lt;code&gt;plugin_destroy&lt;/code&gt;. In the second case, &lt;code&gt;plugin_destroy&lt;/code&gt; will not be called and the plugin framework will return a generic error.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The format of the config string is entirely determined by the plugin author, and by default is passed unchanged from Falco/the application using the plugin framework to the plugin. However, semi-structured formats like JSON/YAML are preferable to free-form text. In those cases, the plugin author can provide a schema describing the config string contents by implementing the optional &lt;code&gt;get_init_schema&lt;/code&gt; function. If so, the &lt;code&gt;init&lt;/code&gt; function can assume the passed-in configuration string to always be well-formed, and can avoid performing any error handling. The plugin framework will take care of automatically parsing it against the provided schema and generating ad-hoc errors accordingly. Please refer to the documentation of &lt;code&gt;get_init_schema&lt;/code&gt; for more details.&lt;/p&gt;
&lt;p&gt;If a non-NULL ss_plugin_t* state is returned, then subsequent invocations of &lt;code&gt;init&lt;/code&gt; must not return the same &lt;code&gt;ss_plugin_t *&lt;/code&gt; value again, unless it has been disposed with &lt;code&gt;destroy&lt;/code&gt; first.&lt;/p&gt;
&lt;h3 id="destroy"&gt;destroy&lt;/h3&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;void plugin_destroy(ss_plugin_t *s) [Required: yes]
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;This function frees any resources held in the &lt;code&gt;ss_plugin_t&lt;/code&gt; struct. Afterwards, the handle should be considered destroyed and no further API functions will be called with that handle.&lt;/p&gt;
&lt;h3 id="get-last-error"&gt;get_last_error&lt;/h3&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;const char* plugin_get_last_error(ss_plugin_t* s) [Required: yes]
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;This function is called by the framework after a prior call returned an error. The plugin should return a meaningful error string providing more information about the most recent error.&lt;/p&gt;
&lt;h3 id="get-init-schema"&gt;get_init_schema&lt;/h3&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;const char* plugin_get_init_schema(ss_plugin_schema_type* schema_type) [Required: no]
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;This function returns a schema that describes the configuration to be passed to &lt;code&gt;init&lt;/code&gt; during plugin initialization. The return value is a C string, with memory owned by the plugin, representing the configuration schema. The type of schema returned is compliant with the &lt;code&gt;ss_plugin_schema_type&lt;/code&gt; enumeration, and is written inside the &lt;code&gt;schema_type&lt;/code&gt; output argument.&lt;/p&gt;
&lt;p&gt;Although this function is non-required, it is common to implement it due to the benefits it brings. If &lt;code&gt;get_init_schema&lt;/code&gt; is correctly implemented, the &lt;code&gt;init&lt;/code&gt; function can assume the passed-in configuration string to always be well-formed. The plugin framework will take care of automatically parsing it against the provided schema and generating ad-hoc errors accordingly. This also serves as a piece of documentation for users about how the plugin needs to be configured.&lt;/p&gt;
&lt;p&gt;Currently, the plugin framework only supports the &lt;a href="https://json-schema.org/"&gt;JSON Schema format&lt;/a&gt;, which is represented by the &lt;code&gt;SS_PLUGIN_SCHEMA_JSON&lt;/code&gt; enum value. If a plugin defines a JSON Schema, the framework will require the init configuration string to be a valid json-formatted string.&lt;/p&gt;
&lt;p&gt;Writing the dummy enum value &lt;code&gt;SS_PLUGIN_SCHEMA_NONE&lt;/code&gt; inside &lt;code&gt;schema_type&lt;/code&gt; is equivalent to avoiding implementing the &lt;code&gt;get_init_schema&lt;/code&gt; function itself, which ends up with the framework treating the init configuration as an opaque string with no additional checks.&lt;/p&gt;
&lt;h3 id="set-config"&gt;set_config&lt;/h3&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;ss_plugin_rc plugin_set_config(ss_plugin_t* s, const ss_plugin_set_config_input* i) [Required: no]
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Sets a new plugin configuration when provided by the framework.
The new configuration is provided by &lt;code&gt;config&lt;/code&gt; as a string in &lt;code&gt;ss_plugin_set_config_input* i&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;This function should return:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;SS_PLUGIN_SUCCESS&lt;/code&gt; (0) if the config is accepted&lt;/li&gt;
&lt;li&gt;&lt;code&gt;SS_PLUGIN_FAILURE&lt;/code&gt; (1) if the config is rejected&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If rejected, the plugin should provide context in the string returned by &lt;code&gt;get_last_error()&lt;/code&gt; before returning.&lt;/p&gt;
&lt;h3 id="get-metrics"&gt;get_metrics&lt;/h3&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;ss_plugin_metric* plugin_get_metrics(ss_plugin_t* s, uint32_t* num_metrics) [Required: no]
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;This function returns the pointer to the first element of an array containing plugin-provided custom metrics.&lt;/p&gt;
&lt;p&gt;Each element of the array is a &lt;code&gt;ss_plugin_metric&lt;/code&gt; which is &lt;a href="https://github.com/falcosecurity/libs/blob/0.17.2/userspace/plugin/plugin_types.h#L331-L345"&gt;defined&lt;/a&gt; in the plugin API as follows:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-CPP" data-lang="CPP"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;typedef&lt;/span&gt; &lt;span style="color:#a2f;font-weight:bold"&gt;struct&lt;/span&gt; &lt;span style="color:#00f"&gt;ss_plugin_metric&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#a2f;font-weight:bold"&gt;const&lt;/span&gt; &lt;span style="color:#0b0;font-weight:bold"&gt;char&lt;/span&gt;&lt;span style="color:#666"&gt;*&lt;/span&gt; name; &lt;span style="color:#080;font-style:italic"&gt;//Opaque string representing the metric name.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; ss_plugin_metric_type type; &lt;span style="color:#080;font-style:italic"&gt;// Metric type, indicates whether the metric value is monotonic or non-monotonic.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; ss_plugin_metric_value value; &lt;span style="color:#080;font-style:italic"&gt;// Metric numeric value.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; ss_plugin_metric_value_type value_type; &lt;span style="color:#080;font-style:italic"&gt;// Metric value data type, e.g. `uint64_t`.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;} ss_plugin_metric;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Each metric defines its own name, value, type (monotonic or non-monotonic) and value type (data type of its numeric value).&lt;/p&gt;
&lt;p&gt;The argument &lt;code&gt;num_metrics&lt;/code&gt; is a return argument and must be set to the length of the array before returning. It can be set to &lt;code&gt;0&lt;/code&gt; if no metrics are provided.&lt;/p&gt;
&lt;h2 id="event-sourcing-capability-api"&gt;Event Sourcing Capability API&lt;/h2&gt;
&lt;h3 id="get-id"&gt;get_id&lt;/h3&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;uint32_t plugin_get_id() [Required: varies]
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;This should return the &lt;a href="https://v0-43--falcosecurity.netlify.app/docs/plugins#plugin-event-ids"&gt;event ID&lt;/a&gt; allocated to your plugin. During development and before receiving an official event ID, you can use the &amp;quot;Test&amp;quot; value of 999.&lt;/p&gt;
&lt;p&gt;This function is required if &lt;code&gt;get_event_source&lt;/code&gt; is defined and returns a non-empty string, otherwise it is considered optional. Returning zero is equivalent to not implementing the function. If the plugin has a non-zero ID and a non-empty event source, then its &lt;code&gt;next_batch&lt;/code&gt; function is allowed to only return events of plugin type (code 322) with its own plugin ID and event source.&lt;/p&gt;
&lt;h3 id="get-event-source"&gt;get_event_source&lt;/h3&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;const char* plugin_get_event_source() [Required: varies]
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;This function returns a C string, with memory owned by the plugin, containing the plugin's &lt;a href="https://v0-43--falcosecurity.netlify.app/docs/plugins/#plugin-event-sources-and-interoperability"&gt;event source&lt;/a&gt;. This event source is used for:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Associating Falco rules with plugin events--A Falco rule with a &lt;code&gt;source: gizmo&lt;/code&gt; property will run on all events returned by the gizmo plugin's &lt;code&gt;next_batch&lt;/code&gt; function.&lt;/li&gt;
&lt;li&gt;Linking together plugins with field extraction capability and plugins with event sourcing capability. The first can list a given event source like &lt;code&gt;gizmo&lt;/code&gt; in its &lt;code&gt;get_extract_event_sources&lt;/code&gt; function, and they will get an opportunity to extract fields from all events returned by the &amp;quot;gizmo&amp;quot; plugin.&lt;/li&gt;
&lt;li&gt;Ensuring that only one plugin at a time is loaded for a given source.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;When defining a source, make sure it accurately describes the events from your plugin (e.g. use &lt;code&gt;aws_cloudtrail&lt;/code&gt; for AWS CloudTrail events, not &lt;code&gt;json&lt;/code&gt; or &lt;code&gt;logs&lt;/code&gt;) and doesn't overlap with the source of any other plugin with event sourcing capability.&lt;/p&gt;
&lt;p&gt;The only time where duplicate sources make sense are when a group of plugins can use a standard data format for a given event. For example, plugins might extract &lt;code&gt;k8s_audit&lt;/code&gt; events from multiple cloud sources like gcp, azure, aws, etc. If they all format their events as json objects that have identical formats as one could obtain by using &lt;a href="https://kubernetes.io/docs/tasks/debug-application-cluster/audit/"&gt;K8s Audit&lt;/a&gt; hooks, then it would make sense for the plugins to use the same source.&lt;/p&gt;
&lt;p&gt;This function is required if &lt;code&gt;get_id&lt;/code&gt; is defined and returns a non-zero ID, otherwise it is considered optional. Returning an empty string is equivalent to not implementing the function. If the plugin has a non-zero ID and a non-empty event source, then its &lt;code&gt;next_batch&lt;/code&gt;
function is allowed to only return events of plugin type (code 322) with its own plugin ID and event source.&lt;/p&gt;
&lt;h3 id="open"&gt;open&lt;/h3&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;ss_instance_t* plugin_open(ss_plugin_t* s, const char* params, int32_t* rc) [Required: yes]
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;This function is called to &amp;quot;open&amp;quot; a stream of events. The interpretation of a stream of events is up to the plugin author, but think of &lt;code&gt;plugin_init&lt;/code&gt; as initializing the plugin software, and &lt;code&gt;plugin_open&lt;/code&gt; as configuring the software to return events. Using a streaming audio analogy, &lt;code&gt;plugin_init&lt;/code&gt; turns on the app, and &lt;code&gt;plugin_open&lt;/code&gt; starts a streaming audio channel.&lt;/p&gt;
&lt;p&gt;The same general guidelines apply for &lt;code&gt;plugin_open&lt;/code&gt; as do for &lt;code&gt;plugin_init&lt;/code&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;All state related to sourcing a stream of events should be in the returned &lt;code&gt;ss_instance_t&lt;/code&gt; pointer.&lt;/li&gt;
&lt;li&gt;Return 0 on success, 1 on error. Be ready to return an error via &lt;code&gt;plugin_get_last_error&lt;/code&gt; on error.&lt;/li&gt;
&lt;li&gt;The plugin should support concurrent open sessions at once. Unlike plugin-level state, it's very likely that the plugin framework might call &lt;code&gt;plugin_open&lt;/code&gt; multiple times for a given plugin.&lt;/li&gt;
&lt;li&gt;On error, do not return any instance struct, as the plugin framework will not call &lt;code&gt;plugin_close&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If a non-NULL &lt;code&gt;ss_instance_t*&lt;/code&gt; instance is returned, then subsequent invocations of &lt;code&gt;open&lt;/code&gt; must not return the same &lt;code&gt;ss_instance_t*&lt;/code&gt; value again, unless it has been disposed with &lt;code&gt;close&lt;/code&gt; first.&lt;/p&gt;
&lt;h3 id="close"&gt;close&lt;/h3&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;void plugin_close(ss_plugin_t* s, ss_instance_t* h) [Required: yes]
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;This function closes a stream of events previously started via a call to &lt;code&gt;plugin_open&lt;/code&gt;. Afterwards, the stream should be considered closed and the framework will not call &lt;code&gt;plugin_next_batch&lt;/code&gt;/&lt;code&gt;plugin_extract_fields&lt;/code&gt; with the same &lt;code&gt;ss_instance_t&lt;/code&gt; pointer.&lt;/p&gt;
&lt;h3 id="next-batch"&gt;next_batch&lt;/h3&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;int32_t plugin_next_batch(ss_plugin_t* s, ss_instance_t* h, uint32_t *nevts, ss_plugin_event ***evts) [Required: yes]
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;This function is used to return a set of next events to the plugin framework, given a plugin state and open instance.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;*evts&lt;/code&gt; should be updated to an allocated contiguous array of &lt;code&gt;ss_plugin_event&lt;/code&gt; pointers. The memory for the structs array is owned by the plugin and should be held until the next call to &lt;code&gt;plugin_next_batch&lt;/code&gt;. &lt;code&gt;*nevts&lt;/code&gt; should be updated with the number of events returned.&lt;/p&gt;
&lt;p&gt;An event is represented by a &lt;code&gt;ss_plugin_event&lt;/code&gt; struct, which observes the same format of the &lt;a href="https://v0-43--falcosecurity.netlify.app/docs/reference/plugins/plugin-api-reference/#libscap-event-block-specification"&gt;libscap event block specification&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This function should return:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;SS_PLUGIN_SUCCESS&lt;/code&gt; (0) on success&lt;/li&gt;
&lt;li&gt;&lt;code&gt;SS_PLUGIN_FAILURE&lt;/code&gt; (1) on failure&lt;/li&gt;
&lt;li&gt;&lt;code&gt;SS_PLUGIN_TIMEOUT&lt;/code&gt; (-1) on non-error but there are no events to return.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;SS_PLUGIN_EOF&lt;/code&gt; (6) when the stream of events is complete.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If the plugin receives a &lt;code&gt;SS_PLUGIN_FAILURE&lt;/code&gt;, it will close the stream of events by calling &lt;code&gt;plugin_close&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;If a plugin implements a specific event source (&lt;code&gt;get_id&lt;/code&gt; is non-zero and &lt;code&gt;get_event_source&lt;/code&gt; is non-empty), then, it is only allowed to produce events of type plugin (code 322) containing its own plugin ID (as returned by &lt;code&gt;get_id&lt;/code&gt;). In such a case, when an event contains a zero plugin ID, the framework automatically sets the plugin ID of the event to the one of the plugin. If a plugin does not implement a specific event source, it is allowed to produce events of any of the types supported by the &lt;a href="https://v0-43--falcosecurity.netlify.app/docs/reference/plugins/plugin-api-reference/#libscap-event-block-specification"&gt;libscap specific&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;SS_PLUGIN_TIMEOUT&lt;/code&gt; should be returned whenever no events can be returned immediately. This ensures that the plugin framework is not stalled waiting for a response from &lt;code&gt;plugin_next_batch&lt;/code&gt;. When the framework receives a &lt;code&gt;SS_PLUGIN_TIMEOUT&lt;/code&gt;, it will keep the stream of events open and call &lt;code&gt;plugin_next_batch&lt;/code&gt; again later.&lt;/p&gt;
&lt;p&gt;This function can be invoked concurrently by multiple threads, each with distinct and unique parameter values. The value of the &lt;code&gt;ss_plugin_event***&lt;/code&gt; output parameter must be uniquely attached to the ss_instance_t* parameter value. The pointer must not be shared across multiple distinct &lt;code&gt;ss_instance_t*&lt;/code&gt; values.&lt;/p&gt;
&lt;h3 id="get-progress"&gt;get_progress&lt;/h3&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;const char* plugin_get_progress(ss_plugin_t* s, ss_instance_t* h, uint32_t* progress_pct) [Required: no]
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;If the plugin exports this function, the framework will periodically call it after open to return how much of the event stream has been read. If a plugin does not provide a bounded stream of events (for example, events coming from a file or other source that has an ending), it should not export this function.&lt;/p&gt;
&lt;p&gt;If not exported, the plugin framework will not print meaningful process indicators while processing event streams.&lt;/p&gt;
&lt;p&gt;When called, the &lt;code&gt;progress_pct&lt;/code&gt; pointer should be updated with the read progress, as a number between 0 (no data has been read) and 10000 (100% of the data has been read). This encoding allows the engine to print progress decimals without requiring to deal with floating point numbers (which could cause incompatibility problems with some languages).&lt;/p&gt;
&lt;p&gt;The return value is an string representation of the read progress, with the memory owned by the plugin. This might include the progress percentage combined with additional context added by the plugin. The plugin can return &lt;code&gt;NULL&lt;/code&gt;. In this case, the framework will use the &lt;code&gt;progress_pct&lt;/code&gt; value instead.&lt;/p&gt;
&lt;p&gt;This function can be invoked concurrently by multiple threads, each with distinct and unique parameter values. If the returned pointer is non-NULL, then it must be uniquely attached to the &lt;code&gt;ss_instance_t*&lt;/code&gt; parameter value. The pointer must not be shared across multiple distinct &lt;code&gt;ss_instance_t*&lt;/code&gt; values.&lt;/p&gt;
&lt;h3 id="event-to-string"&gt;event_to_string&lt;/h3&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;const char* plugin_event_to_string(ss_plugin_t *s, const ss_plugin_event_input *evt) [Required: no]
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;This function is used to return a printable representation of an event. The memory is owned by the plugin and can be freed on the next call to &lt;code&gt;plugin_event_to_string&lt;/code&gt;. It is used in filtering/output expressions as the built-in field &lt;code&gt;evt.plugininfo&lt;/code&gt;. Even if implemented, this function is ignored if a plugin does not implement a specific event source (&lt;code&gt;get_id&lt;/code&gt; is undefined or returns zero, and &lt;code&gt;get_event_source&lt;/code&gt; is undefined or returns an empty string).&lt;/p&gt;
&lt;p&gt;The string representation should be on a single line and contain important information about the event. It is not necessary to return all information from the event. Simply return the most important fields/properties of the event that provide a useful default representation.&lt;/p&gt;
&lt;p&gt;Here is an example output, from the &lt;a href="https://github.com/falcosecurity/plugins/blob/master/plugins/cloudtrail"&gt;cloudtrail&lt;/a&gt; plugin:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;us-east-1 masters.some-demo.k8s.local s3 GetObject Size=0 URI=s3://some-demo-env/some-demo.k8s.local/backups/etcd/events/control/etcd-cluster-created
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;This function can be invoked concurrently by multiple threads, each with distinct and unique parameter values. If the returned pointer is non-NULL, then it must be uniquely attached to the &lt;code&gt;ss_plugin_t*&lt;/code&gt; parameter value. The pointer must not be shared across multiple distinct &lt;code&gt;ss_plugin_t*&lt;/code&gt; values.&lt;/p&gt;
&lt;h3 id="list-open-params"&gt;list_open_params&lt;/h3&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;const char* plugin_list_open_params(ss_plugin_t* s, ss_plugin_rc* rc) [Required: no]
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;This function returns a list of suggested values that are valid parameters for the &lt;code&gt;open&lt;/code&gt; plugin function.
Although non-required, this function is useful to instruct users about potential valid parameters for opening a stream of events. Implementing this function also brings additional usage documentation for the plugin, and allows makes it more usable with automated tools.&lt;/p&gt;
&lt;p&gt;The returned value is a json string, with memory owned by the plugin, which contains an array of objects. Each object describes one suggested value for the &lt;code&gt;open&lt;/code&gt; function. Here's an example:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-json" data-lang="json"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;[
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; {&lt;span style="color:#008000;font-weight:bold"&gt;&amp;#34;value&amp;#34;&lt;/span&gt;: &lt;span style="color:#b44"&gt;&amp;#34;resource1&amp;#34;&lt;/span&gt;, &lt;span style="color:#008000;font-weight:bold"&gt;&amp;#34;desc&amp;#34;&lt;/span&gt;: &lt;span style="color:#b44"&gt;&amp;#34;An example of openable resource&amp;#34;&lt;/span&gt;},
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; {&lt;span style="color:#008000;font-weight:bold"&gt;&amp;#34;value&amp;#34;&lt;/span&gt;: &lt;span style="color:#b44"&gt;&amp;#34;resource2&amp;#34;&lt;/span&gt;, &lt;span style="color:#008000;font-weight:bold"&gt;&amp;#34;desc&amp;#34;&lt;/span&gt;: &lt;span style="color:#b44"&gt;&amp;#34;Another example of openable resource&amp;#34;&lt;/span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#008000;font-weight:bold"&gt;&amp;#34;value&amp;#34;&lt;/span&gt;: &lt;span style="color:#b44"&gt;&amp;#34;res1;res2;res3&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#008000;font-weight:bold"&gt;&amp;#34;desc&amp;#34;&lt;/span&gt;: &lt;span style="color:#b44"&gt;&amp;#34;Some names&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#008000;font-weight:bold"&gt;&amp;#34;separator&amp;#34;&lt;/span&gt;: &lt;span style="color:#b44"&gt;&amp;#34;;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;]
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Each object has the following properties:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;value&lt;/code&gt;: a string usable as a parameter for &lt;code&gt;open&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;desc&lt;/code&gt;: (optional) a string with that describes the meaning of &lt;code&gt;value&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;separator&lt;/code&gt;: (optional) a string representing a separator string in case &lt;code&gt;value&lt;/code&gt; represents a list of concatenated values. This can be used by plugins to specify an open param that represents more than one source, in which case they can be separated by the separator substring. It's a plugin responsibility to specify the separator string.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="field-extraction-capability-api"&gt;Field Extraction Capability API&lt;/h2&gt;
&lt;h3 id="get-fields"&gt;get_fields&lt;/h3&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;const char* plugin_get_fields() [Required: yes]
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;This function should return the set of fields supported by the plugin. Remember, a field is a name (e.g. &lt;code&gt;proc.name&lt;/code&gt;) that can extract a value (e.g. &lt;code&gt;nginx&lt;/code&gt;) from an event (e.g. a syscall event involving a process). The return value is a string whose memory is owned by the plugin. The string is json formatted and contains an array of objects. Each object describes one field. Here's an example:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-json" data-lang="json"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;[
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; {&lt;span style="color:#008000;font-weight:bold"&gt;&amp;#34;type&amp;#34;&lt;/span&gt;: &lt;span style="color:#b44"&gt;&amp;#34;string&amp;#34;&lt;/span&gt;, &lt;span style="color:#008000;font-weight:bold"&gt;&amp;#34;name&amp;#34;&lt;/span&gt;: &lt;span style="color:#b44"&gt;&amp;#34;gizmo.field1&amp;#34;&lt;/span&gt;, &lt;span style="color:#008000;font-weight:bold"&gt;&amp;#34;arg&amp;#34;&lt;/span&gt;: {&lt;span style="color:#008000;font-weight:bold"&gt;&amp;#34;isRequired&amp;#34;&lt;/span&gt;: &lt;span style="color:#a2f;font-weight:bold"&gt;true&lt;/span&gt;, &lt;span style="color:#008000;font-weight:bold"&gt;&amp;#34;isKey&amp;#34;&lt;/span&gt;: &lt;span style="color:#a2f;font-weight:bold"&gt;true&lt;/span&gt;}, &lt;span style="color:#008000;font-weight:bold"&gt;&amp;#34;desc&amp;#34;&lt;/span&gt;: &lt;span style="color:#b44"&gt;&amp;#34;Describing field 1&amp;#34;&lt;/span&gt;},
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; {&lt;span style="color:#008000;font-weight:bold"&gt;&amp;#34;type&amp;#34;&lt;/span&gt;: &lt;span style="color:#b44"&gt;&amp;#34;uint64&amp;#34;&lt;/span&gt;, &lt;span style="color:#008000;font-weight:bold"&gt;&amp;#34;name&amp;#34;&lt;/span&gt;: &lt;span style="color:#b44"&gt;&amp;#34;gizmo.field2&amp;#34;&lt;/span&gt;, &lt;span style="color:#008000;font-weight:bold"&gt;&amp;#34;desc&amp;#34;&lt;/span&gt;: &lt;span style="color:#b44"&gt;&amp;#34;Describing field 2&amp;#34;&lt;/span&gt;, &lt;span style=""&gt;properties:&lt;/span&gt; &lt;span style=""&gt;[&lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;&amp;#34;hidden&amp;#34;&lt;/span&gt;&lt;span style=""&gt;]&lt;/span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;]
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Each object has the following properties:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;type&lt;/code&gt;: one of &amp;quot;string&amp;quot;, &amp;quot;uint64&amp;quot;, &amp;quot;bool&amp;quot;, &amp;quot;reltime&amp;quot;, &amp;quot;abstime&amp;quot;, &amp;quot;ipaddr&amp;quot;, &amp;quot;ipnet&amp;quot;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;name&lt;/code&gt;: a string with a name for the field. By convention, this is a dot-separated path of names. Use a consistent first name e.g. &amp;quot;ct.xxx&amp;quot; to help filter authors associate the field with a given plugin.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;isList&lt;/code&gt;: (optional) If present and set to true, notes that the field extracts a list of values. Fields of this kind can only be used with the &lt;code&gt;in&lt;/code&gt; and &lt;code&gt;intersects&lt;/code&gt; filtering operators. For list fields, extracting single values means extracting lists of length equal to 1.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;arg&lt;/code&gt;: (optional) if present, notes that the field can accept an argument e.g. field[arg]. More precisely, the following flags could be specified:
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;isRequired&lt;/code&gt;: if true, the argument is required.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;isIndex&lt;/code&gt;: if true, the field is numeric.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;isKey&lt;/code&gt;: if true, the field is a string. If &lt;code&gt;isRequired&lt;/code&gt; is true, one between &lt;code&gt;isIndex&lt;/code&gt; and &lt;code&gt;isKey&lt;/code&gt; must be true, to specify the argument type. If &lt;code&gt;isRequired&lt;/code&gt; is false, but one between &lt;code&gt;isIndex&lt;/code&gt; and &lt;code&gt;isKey&lt;/code&gt; is true, the argument is allowed but not required.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;display&lt;/code&gt;: (optional) If present, a string that will be used to display the field instead of the name. Used in tools like wireshark.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;desc&lt;/code&gt;: a string with a short description of the field. This will be used in help output so be concise and descriptive.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;properties&lt;/code&gt;: (optional) If present, an array of additional properties that apply to the field. The value is an array of strings that can be one of the following:
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;hidden&lt;/code&gt;: Do not display the field when using programs like &lt;code&gt;falco --list&lt;/code&gt; to list the set of supported fields.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;conversation&lt;/code&gt;: This field is applicable for use in &lt;a href="https://www.wireshark.org/docs/wsug_html_chunked/ChStatConversations.html"&gt;wireshark conversations&lt;/a&gt;, and denotes that the field represents one half of a &amp;quot;conversation&amp;quot; that can be shown in the conversations or endpoints view.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;info&lt;/code&gt;: Also applicable for use in wireshark, and denotes that it should be appended to the &amp;quot;info&amp;quot; column in the wireshark event list.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;When defining fields, keep the following guidelines in mind:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Field names should generally have the plugin name/event source as the first component, and usually have one or two additional components. For example, &lt;code&gt;gizmo.pid&lt;/code&gt; is preferred over &lt;code&gt;gizmo.process.id.is&lt;/code&gt;. If a plugin has a moderately large set of fields, using components to group fields may make sense (e.g. &lt;code&gt;cloudtrail.s3.bytes.in&lt;/code&gt; and &lt;code&gt;cloudtrail.s3.bytes.out&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;Fields should be idempotent: for a given event, the value for a field should be the same regardless of when/where the event was generated.&lt;/li&gt;
&lt;li&gt;Fields should be neutral: define fields that extract properties of the event (e.g. &amp;quot;source ip address&amp;quot;) rather than judgements (e.g. &amp;quot;source ip address is associated with a botnet&amp;quot;).&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="extract-fields"&gt;extract_fields&lt;/h3&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;int32_t plugin_extract_fields(ss_plugin_t *s, const ss_plugin_event_input *evt, const ss_plugin_field_extract_input* in) [Required: yes]
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;This function is used to return the value for one or more field names that were returned in &lt;code&gt;plugin_get_fields&lt;/code&gt;. The framework provides an event and an input containing an array of &lt;code&gt;ss_plugin_extract_field&lt;/code&gt; structs. Each struct has one field name/type, and the plugin fills in each struct with the corresponding value for that field.&lt;/p&gt;
&lt;p&gt;The format of the &lt;code&gt;ss_plugin_extract_field&lt;/code&gt; struct is the following:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-CPP" data-lang="CPP"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#080;font-style:italic"&gt;// The noncontiguous numbers are to maintain equality with underlying
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#080;font-style:italic"&gt;// falcosecurity/libs types.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;typedef&lt;/span&gt; &lt;span style="color:#a2f;font-weight:bold"&gt;enum&lt;/span&gt; &lt;span style="color:#00f"&gt;ss_plugin_field_type&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#080;font-style:italic"&gt;// A 64bit unsigned integer.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; FTYPE_UINT64 &lt;span style="color:#666"&gt;=&lt;/span&gt; &lt;span style="color:#666"&gt;8&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#080;font-style:italic"&gt;// A printable buffer of bytes, NULL terminated
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; FTYPE_STRING &lt;span style="color:#666"&gt;=&lt;/span&gt; &lt;span style="color:#666"&gt;9&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#080;font-style:italic"&gt;// A relative time. Seconds * 10^9 + nanoseconds. 64bit.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; FTYPE_RELTIME &lt;span style="color:#666"&gt;=&lt;/span&gt; &lt;span style="color:#666"&gt;20&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#080;font-style:italic"&gt;// An absolute time interval. Seconds from epoch * 10^9 + nanoseconds. 64bit.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; FTYPE_ABSTIME &lt;span style="color:#666"&gt;=&lt;/span&gt; &lt;span style="color:#666"&gt;21&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#080;font-style:italic"&gt;// A boolean value, 4 bytes.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; FTYPE_BOOL &lt;span style="color:#666"&gt;=&lt;/span&gt; &lt;span style="color:#666"&gt;25&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#080;font-style:italic"&gt;// Either an IPv4 or IPv6 address. The length indicates which one it is.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; FTYPE_IPADDR &lt;span style="color:#666"&gt;=&lt;/span&gt; &lt;span style="color:#666"&gt;40&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#080;font-style:italic"&gt;// Either an IPv4 or IPv6 network. The length indicates which one it is.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#080;font-style:italic"&gt;// The field encodes only the IP address, so this differs from FTYPE_IPADDR,
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#080;font-style:italic"&gt;// from the way the framework perform runtime checks and comparisons.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; FTYPE_IPNET &lt;span style="color:#666"&gt;=&lt;/span&gt; &lt;span style="color:#666"&gt;41&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}ss_plugin_field_type;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;typedef&lt;/span&gt; &lt;span style="color:#a2f;font-weight:bold"&gt;struct&lt;/span&gt; &lt;span style="color:#00f"&gt;ss_plugin_extract_field&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#a2f;font-weight:bold"&gt;union&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#a2f;font-weight:bold"&gt;const&lt;/span&gt; &lt;span style="color:#0b0;font-weight:bold"&gt;char&lt;/span&gt;&lt;span style="color:#666"&gt;**&lt;/span&gt; str;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#0b0;font-weight:bold"&gt;uint64_t&lt;/span&gt;&lt;span style="color:#666"&gt;*&lt;/span&gt; u64;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#0b0;font-weight:bold"&gt;uint32_t&lt;/span&gt;&lt;span style="color:#666"&gt;*&lt;/span&gt; u32;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; ss_plugin_bool&lt;span style="color:#666"&gt;*&lt;/span&gt; boolean;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; ss_plugin_byte_buffer&lt;span style="color:#666"&gt;*&lt;/span&gt; buf;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; } res;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#0b0;font-weight:bold"&gt;uint64_t&lt;/span&gt; res_len;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#0b0;font-weight:bold"&gt;uint32_t&lt;/span&gt; field_id;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#a2f;font-weight:bold"&gt;const&lt;/span&gt; &lt;span style="color:#0b0;font-weight:bold"&gt;char&lt;/span&gt;&lt;span style="color:#666"&gt;*&lt;/span&gt; field;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#a2f;font-weight:bold"&gt;const&lt;/span&gt; &lt;span style="color:#0b0;font-weight:bold"&gt;char&lt;/span&gt;&lt;span style="color:#666"&gt;*&lt;/span&gt; arg_key;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#0b0;font-weight:bold"&gt;uint64_t&lt;/span&gt; arg_index;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#0b0;font-weight:bold"&gt;bool&lt;/span&gt; arg_present;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#0b0;font-weight:bold"&gt;uint32_t&lt;/span&gt; ftype;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#0b0;font-weight:bold"&gt;bool&lt;/span&gt; flist;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;} ss_plugin_extract_field;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;For each struct, the plugin fills in &lt;code&gt;field_id&lt;/code&gt;/&lt;code&gt;field&lt;/code&gt;/&lt;code&gt;arg&lt;/code&gt;/&lt;code&gt;ftype&lt;/code&gt; with the field. &lt;code&gt;field_id&lt;/code&gt; is the index into the original list of fields returned by &lt;code&gt;plugin_get_fields&lt;/code&gt;, and allows for faster mapping to a plugin's set of fields. The plugin should fill in &lt;code&gt;res_len&lt;/code&gt; and &lt;code&gt;res&lt;/code&gt; with a pointer to an array of values of appropriate type for the field, depending on the field type &lt;code&gt;ftype&lt;/code&gt;. If the field type is &lt;code&gt;FTYPE_STRING&lt;/code&gt;, res should be updated to point to an string with the string value, with memory owned by the plugin. The plugin should retain this memory until the next call to &lt;code&gt;plugin_extract_fields&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;If &lt;code&gt;res_len&lt;/code&gt; is set to zero, the plugin framework assumes that &lt;code&gt;res&lt;/code&gt; is undefined and will not use it. Setting a &lt;code&gt;res_len&lt;/code&gt; value grater than 1 is allowed only for fields for which &lt;code&gt;isList&lt;/code&gt; is defined as true.&lt;/p&gt;
&lt;p&gt;This function can be invoked concurrently by multiple threads, each with distinct and unique parameter values. The value of the &lt;code&gt;ss_plugin_extract_field*&lt;/code&gt; output parameter must be uniquely attached to the &lt;code&gt;ss_plugin_t*&lt;/code&gt; parameter value. The pointer must not be shared across multiple distinct &lt;code&gt;ss_plugin_t*&lt;/code&gt; values.&lt;/p&gt;
&lt;h3 id="get-extract-event-sources"&gt;get_extract_event_sources&lt;/h3&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;const char* plugin_get_extract_event_sources() [Required: no]
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;This function allows the plugin to restrict the kinds of events where the plugin's &lt;code&gt;extract_fields&lt;/code&gt; method will be called. Valid event source names are the ones returned by the &lt;code&gt;get_event_source&lt;/code&gt; function of plugins with event sourcing capability, or &lt;code&gt;syscall&lt;/code&gt; for indicating support to non-plugin events. The return value should be a string containing a json array of compatible event sources, with memory owned by the plugin. Here's an example:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-json" data-lang="json"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;[&lt;span style="color:#b44"&gt;&amp;#34;aws_cloudtrail&amp;#34;&lt;/span&gt;, &lt;span style="color:#b44"&gt;&amp;#34;gcp_cloudtrail&amp;#34;&lt;/span&gt;]
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;This implies that the plugin can potentially extract values from events that have a source &lt;code&gt;aws_cloudtrail&lt;/code&gt; or &lt;code&gt;gcp_cloudtrail&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;This function is optional. If the plugin does not export this function or if it returns an empty array (or &lt;code&gt;NULL&lt;/code&gt;), then if the plugin has sourcing capability, and implements a specific event source, it will only receive events matching its event source, otherwise the framework will assume the plugin can receive events from all event sources.&lt;/p&gt;
&lt;h3 id="get-extract-event-types"&gt;get_extract_event_types&lt;/h3&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;uint16_t* plugin_get_extract_event_types(uint32_t* numtypes) [Required: no]
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;This function allows the plugin to restrict the kinds of events where the plugin's &lt;code&gt;extract_fields&lt;/code&gt; method will be called. The return value is an array of integers representing the event types that the plugin is capable of processing for field extraction. Events with types that are not present in the returned list will not be received by the plugin. The event types follow the enumeration from the &lt;a href="https://v0-43--falcosecurity.netlify.app/docs/reference/plugins/plugin-api-reference/#libscap-event-block-specification"&gt;libscap specific&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This function is optional. If the plugin does not export this function or if it returns an empty array (or &lt;code&gt;NULL&lt;/code&gt;), the plugin will receive every event type if the result of &lt;code&gt;get_extract_event_sources&lt;/code&gt; (either default or custom) is compatible with the &lt;code&gt;syscall&lt;/code&gt; event source, otherwise the plugin will only receive events of plugin type (code 322).&lt;/p&gt;
&lt;h2 id="event-parsing-capability-api"&gt;Event Parsing Capability API&lt;/h2&gt;
&lt;h3 id="parse-event"&gt;parse_event&lt;/h3&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;ss_plugin_rc plugin_parse_event(ss_plugin_t *s, const ss_plugin_event_input *evt, const ss_plugin_event_parse_input* in) [Required: yes]
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Receives an event from the current capture and parses its content. The plugin is guaranteed to receive an event at most once, after any operation related the event sourcing capability, and before any other operation related to the field extraction capability. The returned rc value should be &lt;code&gt;SS_PLUGIN_SUCCESS&lt;/code&gt; (0) on success, &lt;code&gt;SS_PLUGIN_FAILURE&lt;/code&gt; (1) on failure.&lt;/p&gt;
&lt;p&gt;The framework provides an event and an input. The event pointer is allocated and owner by the framework, and it is not guaranteed that to refer to the same memory or data returned by the last &lt;code&gt;next_batch&lt;/code&gt; call (in case the same plugin also supports the event sourcing capability). The input is a vtable containing callbacks towards the plugin's owner that can be used by the plugin for performing read/write operations on state tables not owned by itself, for which it obtained accessors at initialization time. The plugin does not need to go through this vtable in order to read and write from a table it owns.&lt;/p&gt;
&lt;p&gt;This function can be invoked concurrently by multiple threads, each with distinct and unique parameter values. The value of the ss_plugin_event_parse_input* output parameter must be uniquely attached to the ss_plugin_t* parameter value. The pointer must not be shared across multiple distinct ss_plugin_t* values.&lt;/p&gt;
&lt;h3 id="get-parse-event-sources"&gt;get_parse_event_sources&lt;/h3&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;const char* plugin_get_parse_event_sources() [Required: no]
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;This function allows the plugin to restrict the kinds of events where the plugin's &lt;code&gt;parse_event&lt;/code&gt; method will be called. Valid event source names are the ones returned by the &lt;code&gt;get_event_source&lt;/code&gt; function of plugins with event sourcing capability, or &lt;code&gt;syscall&lt;/code&gt; for indicating support to non-plugin events. The return value should be a string containing a json array of compatible event sources, with memory owned by the plugin.&lt;/p&gt;
&lt;p&gt;This function is optional. If the plugin does not export this function or if it returns an empty array (or &lt;code&gt;NULL&lt;/code&gt;), then if the plugin has sourcing capability, and implements a specific event source, it will only receive events matching its event source, otherwise the framework will assume the plugin can receive events from all event sources.&lt;/p&gt;
&lt;h3 id="get-parse-event-types"&gt;get_parse_event_types&lt;/h3&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;uint16_t* plugin_get_parse_event_types(uint32_t* numtypes) [Required: no]
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;This function allows the plugin to restrict the kinds of events where the plugin's &lt;code&gt;parse_event&lt;/code&gt; method will be called. The return value is an array of integers representing the event types that the plugin is capable of processing for field extraction. Events with types that are not present in the returned list will not be received by the plugin. The event types follow the enumeration from the &lt;a href="https://v0-43--falcosecurity.netlify.app/docs/reference/plugins/plugin-api-reference/#libscap-event-block-specification"&gt;libscap specific&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This function is optional. If the plugin does not export this function or if it returns an empty array (or &lt;code&gt;NULL&lt;/code&gt;), the plugin will receive every event type if the result of &lt;code&gt;get_parse_event_sources&lt;/code&gt; (either default or custom) is compatible with the &lt;code&gt;syscall&lt;/code&gt; event source, otherwise the plugin will only receive events of plugin type (code 322).&lt;/p&gt;
&lt;h2 id="async-events-capability-api"&gt;Async Events Capability API&lt;/h2&gt;
&lt;h3 id="get-async-event-sources"&gt;get_async_event_sources&lt;/h3&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;const char* plugin_get_async_event_sources() [Required: no]
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;The return value should be a string containing a json array of compatible event sources, with memory owned by the plugin. The list describes the event sources for which this plugin is capable of injecting async events in the event stream of a capture.&lt;/p&gt;
&lt;p&gt;This function is optional. If the plugin does not export this function or if it returns an empty array (or &lt;code&gt;NULL&lt;/code&gt;), then the async
events produced by a plugin will be injected in the event stream of any source.&lt;/p&gt;
&lt;h3 id="get-async-events"&gt;get_async_events&lt;/h3&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;const char* plugin_get_async_events() [Required: yes]
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Return a string describing the name list of all asynchronous events that this plugin is capable of pushing into a live event stream. The framework can reject async events produced by a plugin if their name is not on the name list returned by this function. The return value should be a string containing a json array of compatible event sources, with memory owned by the plugin.&lt;/p&gt;
&lt;h3 id="set-async-event-handler"&gt;set_async_event_handler&lt;/h3&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;ss_plugin_rc plugin_set_async_event_handler(ss_plugin_t* s, ss_plugin_owner_t* owner, const ss_plugin_async_event_handler_t handler) [Required: yes]
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Sets a function handler that allows the plugin to send events asynchronously to its owner during a live event capture. The handler is a thread-safe function that can be invoked concurrently by multiple threads. The asynchronous events must be encoded as an async event type (code 402) as for the &lt;a href="https://v0-43--falcosecurity.netlify.app/docs/reference/plugins/plugin-api-reference/#libscap-event-block-specification"&gt;libscap specific&lt;/a&gt;. The returned rc value should be &lt;code&gt;SS_PLUGIN_SUCCESS&lt;/code&gt; (0) on success, &lt;code&gt;SS_PLUGIN_FAILURE&lt;/code&gt; (1) on failure.&lt;/p&gt;
&lt;p&gt;The memory of events sent to the async event handler function must be owned by the plugin and is not retained by the owner after the event handler returns. The async event handler function is defined as follows:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-CPP" data-lang="CPP"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#080;font-style:italic"&gt;// Function handler used by plugin for sending asynchronous events to the
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#080;font-style:italic"&gt;// Falcosecurity libs during a live event capture. The asynchronous events
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#080;font-style:italic"&gt;// must be encoded as an async event type (code 402) as for the libscap specific.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#080;font-style:italic"&gt;// The function returns SS_PLUGIN_SUCCESS in case of success, or
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#080;font-style:italic"&gt;// SS_PLUGIN_FAILURE otherwise. If a non-NULL char pointer is passed for
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#080;font-style:italic"&gt;// the &amp;#34;err&amp;#34; argument, it will be filled with an error message string
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#080;font-style:italic"&gt;// in case the handler function returns SS_PLUGIN_FAILURE. The error string
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#080;font-style:italic"&gt;// has a max length of PLUGIN_MAX_ERRLEN (termination char included) and its
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#080;font-style:italic"&gt;// memory must be allocated and owned by the plugin.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;typedef&lt;/span&gt; &lt;span style="color:#00a000"&gt;ss_plugin_rc&lt;/span&gt; (&lt;span style="color:#666"&gt;*&lt;/span&gt;ss_plugin_async_event_handler_t)(ss_plugin_owner_t&lt;span style="color:#666"&gt;*&lt;/span&gt; o, &lt;span style="color:#a2f;font-weight:bold"&gt;const&lt;/span&gt; ss_plugin_event &lt;span style="color:#666"&gt;*&lt;/span&gt;evt, &lt;span style="color:#0b0;font-weight:bold"&gt;char&lt;/span&gt;&lt;span style="color:#666"&gt;*&lt;/span&gt; err);
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The plugin can start sending async events through the passed-in handler right from the moment this function is invoked. &lt;code&gt;set_async_event_handler&lt;/code&gt; can be invoked multiple times during the lifetime of a plugin. In that case, the registered function handler remains valid up until the next invocation of &lt;code&gt;set_async_event_handler&lt;/code&gt; on the same plugin, after which the new handler set must replace any already-set one. If the handler is set to a &lt;code&gt;NULL&lt;/code&gt; function pointer, the plugin is instructed about disabling or stopping the production of async events. If a &lt;code&gt;NULL&lt;/code&gt; handler is set, and an asynchronous job has been started by the plugin before, the plugin should stop the job and wait for it to be finished before returning from this function. Although the event handler is thread-safe and can be invoked concurrently, this function is still invoked by the framework sequentially from the same thread.&lt;/p&gt;
&lt;p&gt;The C++ example below shows how an async event handler can be correctly used from an asynchronous thread with proper start and stop conditions:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-CPP" data-lang="CPP"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;typedef&lt;/span&gt; &lt;span style="color:#a2f;font-weight:bold"&gt;struct&lt;/span&gt; &lt;span style="color:#00f"&gt;my_plugin&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; std&lt;span style="color:#666"&gt;::&lt;/span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;thread&lt;/span&gt; async_thread;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; std&lt;span style="color:#666"&gt;::&lt;/span&gt;atomic&lt;span style="color:#666"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#0b0;font-weight:bold"&gt;bool&lt;/span&gt;&lt;span style="color:#666"&gt;&amp;gt;&lt;/span&gt; async_thread_run;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;} my_plugin;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;extern&lt;/span&gt; &lt;span style="color:#b44"&gt;&amp;#34;C&amp;#34;&lt;/span&gt; ss_plugin_t&lt;span style="color:#666"&gt;*&lt;/span&gt; plugin_init(&lt;span style="color:#a2f;font-weight:bold"&gt;const&lt;/span&gt; ss_plugin_init_input&lt;span style="color:#666"&gt;*&lt;/span&gt; in, ss_plugin_rc&lt;span style="color:#666"&gt;*&lt;/span&gt; rc)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; my_plugin &lt;span style="color:#666"&gt;*&lt;/span&gt;ret &lt;span style="color:#666"&gt;=&lt;/span&gt; &lt;span style="color:#a2f;font-weight:bold"&gt;new&lt;/span&gt; my_plugin();
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; ret&lt;span style="color:#666"&gt;-&amp;gt;&lt;/span&gt;async_thread_run &lt;span style="color:#666"&gt;=&lt;/span&gt; &lt;span style="color:#a2f"&gt;false&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#666"&gt;*&lt;/span&gt;rc &lt;span style="color:#666"&gt;=&lt;/span&gt; SS_PLUGIN_SUCCESS;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#a2f;font-weight:bold"&gt;return&lt;/span&gt; ret;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;extern&lt;/span&gt; &lt;span style="color:#b44"&gt;&amp;#34;C&amp;#34;&lt;/span&gt; &lt;span style="color:#0b0;font-weight:bold"&gt;void&lt;/span&gt; plugin_destroy(ss_plugin_t&lt;span style="color:#666"&gt;*&lt;/span&gt; s)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#080;font-style:italic"&gt;// stop the async thread if it&amp;#39;s running
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; my_plugin &lt;span style="color:#666"&gt;*&lt;/span&gt;ps &lt;span style="color:#666"&gt;=&lt;/span&gt; (my_plugin &lt;span style="color:#666"&gt;*&lt;/span&gt;) s;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#a2f;font-weight:bold"&gt;if&lt;/span&gt; (ps&lt;span style="color:#666"&gt;-&amp;gt;&lt;/span&gt;async_thread_run)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; ps&lt;span style="color:#666"&gt;-&amp;gt;&lt;/span&gt;async_thread_run &lt;span style="color:#666"&gt;=&lt;/span&gt; &lt;span style="color:#a2f"&gt;false&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#a2f;font-weight:bold"&gt;if&lt;/span&gt; (ps&lt;span style="color:#666"&gt;-&amp;gt;&lt;/span&gt;async_thread.joinable())
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; ps&lt;span style="color:#666"&gt;-&amp;gt;&lt;/span&gt;async_thread.join();
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#a2f;font-weight:bold"&gt;delete&lt;/span&gt; ps;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;...
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;extern&lt;/span&gt; &lt;span style="color:#b44"&gt;&amp;#34;C&amp;#34;&lt;/span&gt; ss_plugin_rc plugin_set_async_event_handler(ss_plugin_t&lt;span style="color:#666"&gt;*&lt;/span&gt; s, ss_plugin_owner_t&lt;span style="color:#666"&gt;*&lt;/span&gt; owner, &lt;span style="color:#a2f;font-weight:bold"&gt;const&lt;/span&gt; ss_plugin_async_event_handler_t handler)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; my_plugin &lt;span style="color:#666"&gt;*&lt;/span&gt;ps &lt;span style="color:#666"&gt;=&lt;/span&gt; (my_plugin &lt;span style="color:#666"&gt;*&lt;/span&gt;) s;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#080;font-style:italic"&gt;// stop the async thread if it&amp;#39;s running
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#a2f;font-weight:bold"&gt;if&lt;/span&gt; (ps&lt;span style="color:#666"&gt;-&amp;gt;&lt;/span&gt;async_thread_run)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; ps&lt;span style="color:#666"&gt;-&amp;gt;&lt;/span&gt;async_thread_run &lt;span style="color:#666"&gt;=&lt;/span&gt; &lt;span style="color:#a2f"&gt;false&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#a2f;font-weight:bold"&gt;if&lt;/span&gt; (ps&lt;span style="color:#666"&gt;-&amp;gt;&lt;/span&gt;async_thread.joinable())
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; ps&lt;span style="color:#666"&gt;-&amp;gt;&lt;/span&gt;async_thread.join();
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#080;font-style:italic"&gt;// if an handler is provided, launch an async worker
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#a2f;font-weight:bold"&gt;if&lt;/span&gt; (handler)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; ps&lt;span style="color:#666"&gt;-&amp;gt;&lt;/span&gt;async_thread_run &lt;span style="color:#666"&gt;=&lt;/span&gt; &lt;span style="color:#a2f"&gt;true&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; ps&lt;span style="color:#666"&gt;-&amp;gt;&lt;/span&gt;async_thread &lt;span style="color:#666"&gt;=&lt;/span&gt; std&lt;span style="color:#666"&gt;::&lt;/span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;thread&lt;/span&gt;([ps, owner, handler]()
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#0b0;font-weight:bold"&gt;char&lt;/span&gt; err[PLUGIN_MAX_ERRLEN];
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#a2f;font-weight:bold"&gt;while&lt;/span&gt; (ps&lt;span style="color:#666"&gt;-&amp;gt;&lt;/span&gt;async_thread_run;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; ss_plugin_event&lt;span style="color:#666"&gt;*&lt;/span&gt; evt &lt;span style="color:#666"&gt;=&lt;/span&gt; ps&lt;span style="color:#666"&gt;-&amp;gt;&lt;/span&gt;do_some_work();
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#a2f;font-weight:bold"&gt;if&lt;/span&gt; (handler(owner, evt, err) &lt;span style="color:#666"&gt;!=&lt;/span&gt; SS_PLUGIN_SUCCESS)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#080;font-style:italic"&gt;// report the error somehow
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; });
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#a2f;font-weight:bold"&gt;return&lt;/span&gt; SS_PLUGIN_SUCCESS;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Async events encode a plugin ID that defines its event source. However, this value is set by the framework when the async event is received, and is set to the ID associated to the plugin-defined event source currently open during a live capture, or zero in case of the &lt;code&gt;syscall&lt;/code&gt; event source. The event source assigned by the framework to the async event can only be among the ones compatible with the list returned by &lt;code&gt;get_async_event_sources&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Async events encode a string representing their event name, which is used for runtime matching and define the encoded data payload. Plugins are allowed to only send async events with one of the names expressed in the list returned by &lt;code&gt;get_async_events&lt;/code&gt;. The name of an async event acts as a contract on the encoding of the data payload of all async events with the same name.&lt;/p&gt;
&lt;h2 id="libscap-event-block-specification"&gt;Libscap Event Block Specification&lt;/h2&gt;
&lt;p&gt;Libscap, the Falcosecurity libs component responsible of event captures and control, proposes and supports a specification that regulates the way system, kernel, and plugin events are encoded. The same specification also defines the encoding of SCAP capture files, that can be used by the Falcosecurity libs to record and replay event streams. In the specification, events are defined as a specific block type of the &lt;a href="https://pcapng.com/"&gt;pcap-ng file format&lt;/a&gt;. All the event types and the associated parameters supported by libscap are defined by &lt;a href="https://github.com/falcosecurity/libs/blob/0.11.0/driver/event_table.c"&gt;the libscap's event table&lt;/a&gt;. The plugin API fully shares and observes the libscap's event definitions, and uses them for both reading and writing events from/to the framework.&lt;/p&gt;
&lt;p&gt;As for the libscap specific, an event is represented as a contiguous region of memory composed by a header and a list of parameters appended to it, in the form of:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-CPP" data-lang="CPP"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#080;font-style:italic"&gt;// | evt header | len param 1 (2B/4B) | ... | len param N (2B/4B) | data param 1 | ... | data param N |
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;typedef&lt;/span&gt; &lt;span style="color:#a2f;font-weight:bold"&gt;struct&lt;/span&gt; &lt;span style="color:#00f"&gt;ss_plugin_event&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#0b0;font-weight:bold"&gt;uint64_t&lt;/span&gt; ts; &lt;span style="color:#080;font-style:italic"&gt;/* timestamp, in nanoseconds from epoch */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#0b0;font-weight:bold"&gt;uint64_t&lt;/span&gt; tid; &lt;span style="color:#080;font-style:italic"&gt;/* the tid of the thread that generated this event */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#0b0;font-weight:bold"&gt;uint32_t&lt;/span&gt; len; &lt;span style="color:#080;font-style:italic"&gt;/* the event len, including the header */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#0b0;font-weight:bold"&gt;uint16_t&lt;/span&gt; type; &lt;span style="color:#080;font-style:italic"&gt;/* the event type */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#0b0;font-weight:bold"&gt;uint32_t&lt;/span&gt; nparams; &lt;span style="color:#080;font-style:italic"&gt;/* the number of parameters of the event */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;} ss_plugin_event;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The event header is composed of:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;ts&lt;/code&gt;: the event timestamp, in nanoseconds since the epoch. Can be (uint64_t)-1, in which case the framework will automatically fill the event time with the current time.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;tid&lt;/code&gt;: the tid of the thread that generated this event. Can be (uint64_t)-1 in case no thread is specified, such as when generating a plugin event (type code 322).&lt;/li&gt;
&lt;li&gt;&lt;code&gt;len&lt;/code&gt;: the event len, including the header&lt;/li&gt;
&lt;li&gt;&lt;code&gt;type&lt;/code&gt;: the code of the event, as per the ones supported by the &lt;a href="https://v0-43--falcosecurity.netlify.app/docs/reference/plugins/plugin-api-reference/#libscap-event-block-specification"&gt;libscap specific&lt;/a&gt;. This dictates the number and kind of parameters, and whether the length is encoded as a 2 bytes or 4 bytes integer.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;nparams&lt;/code&gt;: the number of parameters of the event&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;Further and more formal documentation will be available in the future...&lt;/em&gt;&lt;/p&gt;
&lt;h2 id="state-tables-api"&gt;State Tables API&lt;/h2&gt;
&lt;p&gt;In the plugin framework, &lt;strong&gt;state tables&lt;/strong&gt; are simple key-value mappings representing a piece of state owned by a component of the Falcosecurity libs or defined by a plugin. The plugin API declares formal abstract definitions for state tables and provides means for plugins to access the state owned by other components of the framework, define and own their own state, and make it accessible externally. In this context, a component of the framework is an abstract entity that could represent a given piece of machinery within the Falco libraries or any other plugin loaded at runtime.&lt;/p&gt;
&lt;h3 id="basic-concepts"&gt;Basic Concepts&lt;/h3&gt;
&lt;p&gt;A state table is a key-value map that can be used for storing pieces of state within the plugin framework. State tables are an abstract concept, and the plugin API does not enforce any specific implementation. Instead, the API specifies interface boundaries in the form of C virtual tables of methods representing the behavior of state tables. This allows the plugin API to remain flexible, abstract, and multi-language by nature. The model by which state tables work is defined by the notions of ownership, registration, and discovery.&lt;/p&gt;
&lt;p&gt;Every state table must have an owner, which is responsible of managing the table's memory and of implementing all the functions of the state tables API. Owners can either be plugins or any of the other actors that are part of the Falcosecurity libraries. For example, libsinsp is the owner of the &lt;code&gt;threads&lt;/code&gt; table, which is a key-value store where the key is a thread ID of a Linux machine and the value is a set of information describing a Linux thread. Plugins can access the &lt;code&gt;threads&lt;/code&gt; table of libsinsp for retrieving thread information given a thread ID, reading and writing the info fields, extending the info with additional metadata, and do much more. However, plugins are never responsible of managing the memory and the implementation of the &lt;code&gt;threads&lt;/code&gt; table, as it is owned by libsinsp only. Instead, plugins can do the same by defining their own stateful components and implementing the required interface functions to register them as &amp;quot;state tables&amp;quot;. Stateful components must be registered in the framework in order to be considered &amp;quot;state tables&amp;quot;. Libsinsp, which owns the plugins loaded at runtime, also holds a &amp;quot;table registry&amp;quot; that is the source of truth for all the state tables known at runtime. Once a state table is registered in the table registry, it is discoverable by all the actors and plugins running in the context of the same Falcosecurity libs instance.&lt;/p&gt;
&lt;p&gt;The way plugins can interact with state tables is through discovery and the usage of accessors. At initialization time (in the &lt;code&gt;init&lt;/code&gt; function), plugins are provided interface functions that allow them to list all the state tables available at runtime and obtaining &amp;quot;accessors&amp;quot; for later usage. An &lt;em&gt;accessor&lt;/em&gt; is an opaque pointers obtained at initialization time and that can be used later (e.g. when parsing an event or when extracting a field) for accessing a given table or the fields of its entries. Considering the example of the &lt;code&gt;threads&lt;/code&gt; table, in its &lt;code&gt;init&lt;/code&gt; function a given plugin could obtain an accessor to the table and to some of the fields of each thread info (such as the &lt;code&gt;pid&lt;/code&gt; or the &lt;code&gt;comm&lt;/code&gt;) and store them in its plugin state. Later, when extracting a field, the same plugin would be available to query the &lt;code&gt;threads&lt;/code&gt; table for a given thread ID (perhaps obtained by reading the event payload of a syscall) by using the table accessor, and then reading the &lt;code&gt;pid&lt;/code&gt; of the obtained thread by using the field accessor.&lt;/p&gt;
&lt;p&gt;Inherently, the plugin API also enable plugins to define their own state tables and register them in the table registry. Once that's done, the registered state table will be visible to all other plugins just like the &lt;code&gt;threads&lt;/code&gt; table, without knowing nor caring about which actor is owning it. The state table owned by the plugin will be discoverable through the table registry by the plugin itself too. However, plugins owning a given table are not forced to go through the state tables interface in order to operate on it (conversely, this could also be the less efficient choice). Plugins can implement their own state as they prefer, whereas the purpose of the state tables interface is solely to make that state available to other actors in the framework. Coherently, table owners can also decide &amp;quot;how much&amp;quot; of a table they want the other components to have visibility of. For example, libsinsp can access more info and functionalities on the &lt;code&gt;threads&lt;/code&gt; table than what it makes available through the state table interface, which is also natural considering that its implementation is hidden and can be arbitrary.&lt;/p&gt;
&lt;p&gt;The set of state tables made available by a given plugin or Falcosecurity libs actor, and the set of fields and operations available for each of those table, &lt;strong&gt;take part of the semantic versioned UX contract of that plugin or actor&lt;/strong&gt;. For example, removing a given table or table field from libsinsp can be considered a breaking change that must reflected by the version number of the Falcosecurity libs. The same applies for the version of each plugin and the state tables declared by them.&lt;/p&gt;
&lt;h3 id="access-and-consistency"&gt;Access and Consistency&lt;/h3&gt;
&lt;p&gt;State tables are dynamic structures. Each table is defined by a given key type, which can be any of the types supported by the &lt;code&gt;ss_plugin_state_type&lt;/code&gt; enumeration. Then, the each key-value mappings contained in the table are referred to as &lt;em&gt;table entries&lt;/em&gt;. Each entry has a specific set of information fields, which is shared across all the entries of the same table. Each field is named and has a specific type. The set of fields for the entries of a given table is defined dynamically at runtime and can be extended by different actors. For example, libsinsp populates the &lt;code&gt;threads&lt;/code&gt; table with a given set of information fields for each table's entry (representing a given thread info), and plugins can read and write the value of those fields by obtaining accessors for those. However, plugins also have the opportunity of defining new fields inside the &lt;code&gt;threads&lt;/code&gt; table, with a new unique name and a specific type, and libsinsp will be responsible of hosting that new piece of information for each thread and make it available to all actors in the framework. The same can happen for tables defined by any plugin.&lt;/p&gt;
&lt;p&gt;Given that state tables can get modified by different actors at runtime, there has to be a deterministic disambiguation about consistency of table edits and visibility of those changes. The plugin API implements this by guaranteeing a deterministic and non-changing total ordering of all the actors in the system. Considering a given ordering, an actor will have visibility only over the changes applied by actors coming before it in the given ordering. In the Falcosecurity libs and the plugin framework, the guaranteed order is the one by which plugins are loaded at runtime. The first actor in the order is always libsinsp itself, which means that all plugins will always see all the table modifications authored by libsinsp at a given point in time. Then, plugins are ordered by following their loading order at runtime. This means that if Plugin B is loaded in Falco after Plugin A, then Plugin B will see all the table changes performed by Plugin A at runtime, but not the contrary (however, they'll both have visibility over the changes performed by libsinsp). As such &lt;a href="https://v0-43--falcosecurity.netlify.app/docs/plugins/usage/#loading-plugins-in-falco"&gt;the plugins loading order in Falco&lt;/a&gt; can be functionally relevant.&lt;/p&gt;
&lt;h3 id="subtables-and-complex-data-types"&gt;Subtables and complex data types&lt;/h3&gt;
&lt;p&gt;The plugin framework supports a special table field type which is the &lt;code&gt;table&lt;/code&gt; type.
Table entries can use this field to store the handle to another table, which means each entry can have its own subtables.&lt;/p&gt;
&lt;p&gt;For example, the &lt;code&gt;threads&lt;/code&gt; table has a field named &lt;code&gt;file_descriptors&lt;/code&gt;. This field allows accessing the file descriptor table of every thread, making it possible to access useful information about a specific open file descriptor like file &lt;code&gt;name&lt;/code&gt;, &lt;code&gt;pid&lt;/code&gt;, and much more.&lt;/p&gt;
&lt;p&gt;This also unlocks the ability for tables to store/access arrays, maps or even more complex data types. The plugin can &amp;quot;wrap&amp;quot; the complex type in a table by implementing the interface functions for that type, allowing the complex data types to be stored as a subtable.&lt;/p&gt;
&lt;h3 id="obtaining-accessors"&gt;Obtaining Accessors&lt;/h3&gt;
&lt;p&gt;Before performing any operation over state tables, plugins must first obtain accessors for each of them. This can happen only at initialization time through a vtable that is passed only to the &lt;code&gt;init&lt;/code&gt; plugin function. The vtable allows plugins to discover all the tables registered in the framework, get accessors for them, and &lt;a href="https://v0-43--falcosecurity.netlify.app/docs/reference/plugins/plugin-api-reference/#registering-state-tables"&gt;register their own tables&lt;/a&gt;. Once an accessor is obtained, plugins must maintain it up until they are destroyed, and use it during functions related to specific capabilities (e.g. field extraction, event parsing). The vtable passed to &lt;code&gt;init&lt;/code&gt; is reported below.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-CPP" data-lang="CPP"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#080;font-style:italic"&gt;// Vtable for controlling and the fields for the entries of a state table.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#080;font-style:italic"&gt;// This allows discovering the fields available in the table, defining new ones,
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#080;font-style:italic"&gt;// and obtaining accessors usable at runtime for reading and writing the fields&amp;#39;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#080;font-style:italic"&gt;// data from each entry of a given state table.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;typedef&lt;/span&gt; &lt;span style="color:#a2f;font-weight:bold"&gt;struct&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#080;font-style:italic"&gt;// Returns a pointer to an array containing info about all the fields
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#080;font-style:italic"&gt;// available in the entries of the table. nfields will be filled with the number
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#080;font-style:italic"&gt;// of elements of the returned array. The array&amp;#39;s memory is owned by the
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#080;font-style:italic"&gt;// tables&amp;#39;s owner. Returns NULL in case of error.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; ss_plugin_table_fieldinfo&lt;span style="color:#666"&gt;*&lt;/span&gt; (&lt;span style="color:#666"&gt;*&lt;/span&gt;list_table_fields)(ss_plugin_table_t&lt;span style="color:#666"&gt;*&lt;/span&gt; t, &lt;span style="color:#0b0;font-weight:bold"&gt;uint32_t&lt;/span&gt;&lt;span style="color:#666"&gt;*&lt;/span&gt; nfields);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#080;font-style:italic"&gt;//
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#080;font-style:italic"&gt;// Returns an opaque pointer representing an accessor to a data field
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#080;font-style:italic"&gt;// present in all entries of the table, given its name and type.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#080;font-style:italic"&gt;// This can later be used for read and write operations for all entries of
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#080;font-style:italic"&gt;// the table. The pointer is owned by the table&amp;#39;s owner.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#080;font-style:italic"&gt;// Returns NULL in case of issues (including when the field is not defined
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#080;font-style:italic"&gt;// or it has a type different than the specified one).
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; ss_plugin_table_field_t&lt;span style="color:#666"&gt;*&lt;/span&gt; (&lt;span style="color:#666"&gt;*&lt;/span&gt;get_table_field)(ss_plugin_table_t&lt;span style="color:#666"&gt;*&lt;/span&gt; t, &lt;span style="color:#a2f;font-weight:bold"&gt;const&lt;/span&gt; &lt;span style="color:#0b0;font-weight:bold"&gt;char&lt;/span&gt;&lt;span style="color:#666"&gt;*&lt;/span&gt; name, ss_plugin_state_type data_type);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#080;font-style:italic"&gt;//
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#080;font-style:italic"&gt;// Defines a new field in the table given its name and data type,
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#080;font-style:italic"&gt;// which will then be available in all entries contained in the table.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#080;font-style:italic"&gt;// Returns an opaque pointer representing an accessor to the newly-defined
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#080;font-style:italic"&gt;// field. This can later be used for read and write operations for all entries of
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#080;font-style:italic"&gt;// the table. The pointer is owned by the table&amp;#39;s owner.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#080;font-style:italic"&gt;// Returns NULL in case of issues (including when a field is defined multiple
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#080;font-style:italic"&gt;// times with different data types).
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; ss_plugin_table_field_t&lt;span style="color:#666"&gt;*&lt;/span&gt; (&lt;span style="color:#666"&gt;*&lt;/span&gt;add_table_field)(ss_plugin_table_t&lt;span style="color:#666"&gt;*&lt;/span&gt; t, &lt;span style="color:#a2f;font-weight:bold"&gt;const&lt;/span&gt; &lt;span style="color:#0b0;font-weight:bold"&gt;char&lt;/span&gt;&lt;span style="color:#666"&gt;*&lt;/span&gt; name, ss_plugin_state_type data_type);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;} ss_plugin_table_fields_vtable;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;typedef&lt;/span&gt; &lt;span style="color:#a2f;font-weight:bold"&gt;struct&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#080;font-style:italic"&gt;// Returns a pointer to an array containing info about all the tables
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#080;font-style:italic"&gt;// registered in the plugin&amp;#39;s owner. ntables will be filled with the number
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#080;font-style:italic"&gt;// of elements of the returned array. The array&amp;#39;s memory is owned by the
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#080;font-style:italic"&gt;// plugin&amp;#39;s owner. Returns NULL in case of error.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; ss_plugin_table_info&lt;span style="color:#666"&gt;*&lt;/span&gt; (&lt;span style="color:#666"&gt;*&lt;/span&gt;list_tables)(ss_plugin_owner_t&lt;span style="color:#666"&gt;*&lt;/span&gt; o, &lt;span style="color:#0b0;font-weight:bold"&gt;uint32_t&lt;/span&gt;&lt;span style="color:#666"&gt;*&lt;/span&gt; ntables);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#080;font-style:italic"&gt;//
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#080;font-style:italic"&gt;// Returns an opaque accessor to a state table registered in the plugin&amp;#39;s
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#080;font-style:italic"&gt;// owner, given its name and key type. Returns NULL if an case of error.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; ss_plugin_table_t&lt;span style="color:#666"&gt;*&lt;/span&gt; (&lt;span style="color:#666"&gt;*&lt;/span&gt;get_table)(ss_plugin_owner_t&lt;span style="color:#666"&gt;*&lt;/span&gt; o, &lt;span style="color:#a2f;font-weight:bold"&gt;const&lt;/span&gt; &lt;span style="color:#0b0;font-weight:bold"&gt;char&lt;/span&gt;&lt;span style="color:#666"&gt;*&lt;/span&gt; name, ss_plugin_state_type key_type);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#080;font-style:italic"&gt;//
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#080;font-style:italic"&gt;// Registers a new state table in the plugin&amp;#39;s owner. Returns
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#080;font-style:italic"&gt;// SS_PLUGIN_SUCCESS in case of success, and SS_PLUGIN_FAILURE otherwise.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#080;font-style:italic"&gt;// The state table is owned by the plugin itself, and the input will be used
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#080;font-style:italic"&gt;// by other actors of the plugin&amp;#39;s owner to interact with the state table.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; ss_plugin_rc (&lt;span style="color:#666"&gt;*&lt;/span&gt;add_table)(ss_plugin_owner_t&lt;span style="color:#666"&gt;*&lt;/span&gt; o, &lt;span style="color:#a2f;font-weight:bold"&gt;const&lt;/span&gt; ss_plugin_table_input&lt;span style="color:#666"&gt;*&lt;/span&gt; in);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#080;font-style:italic"&gt;//
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#080;font-style:italic"&gt;// Vtable for controlling operations related to fields on the state tables
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#080;font-style:italic"&gt;// registered in the plugin&amp;#39;s owner.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; ss_plugin_table_fields_vtable fields;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;} ss_plugin_init_tables_input;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="obtaining-subtables-accessors"&gt;Obtaining subtables accessors&lt;/h3&gt;
&lt;p&gt;Obtaining table accessors is a bit different for subtables.&lt;/p&gt;
&lt;p&gt;Table accessors can be only obtained at initialization time, however tables may be empty at this time, which means subtables may not yet exist.
The solution to this problem is to create a table entry just to get its subtables.&lt;/p&gt;
&lt;p&gt;Please note that this newly created entry is temporary and it should be used only at initialization time to obtain subtable accessors.&lt;/p&gt;
&lt;p&gt;The following example shows how to obtain accessors for the file descriptor subtable:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-CPP" data-lang="CPP"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;struct&lt;/span&gt; &lt;span style="color:#00f"&gt;plugin_state&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; ss_plugin_table_t&lt;span style="color:#666"&gt;*&lt;/span&gt; thread_table;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; ss_plugin_table_field_t&lt;span style="color:#666"&gt;*&lt;/span&gt; table_field_fdtable;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; ss_plugin_table_field_t&lt;span style="color:#666"&gt;*&lt;/span&gt; table_field_fdtable_name;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;};
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;static&lt;/span&gt; ss_plugin_t&lt;span style="color:#666"&gt;*&lt;/span&gt; &lt;span style="color:#00a000"&gt;plugin_init&lt;/span&gt;(&lt;span style="color:#a2f;font-weight:bold"&gt;const&lt;/span&gt; ss_plugin_init_input&lt;span style="color:#666"&gt;*&lt;/span&gt; in, ss_plugin_rc&lt;span style="color:#666"&gt;*&lt;/span&gt; rc)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; plugin_state &lt;span style="color:#666"&gt;*&lt;/span&gt;ret &lt;span style="color:#666"&gt;=&lt;/span&gt; &lt;span style="color:#a2f;font-weight:bold"&gt;new&lt;/span&gt; plugin_state();
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#080;font-style:italic"&gt;// get the accessor to the threads table
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; ret&lt;span style="color:#666"&gt;-&amp;gt;&lt;/span&gt;thread_table &lt;span style="color:#666"&gt;=&lt;/span&gt; in&lt;span style="color:#666"&gt;-&amp;gt;&lt;/span&gt;tables&lt;span style="color:#666"&gt;-&amp;gt;&lt;/span&gt;get_table(in&lt;span style="color:#666"&gt;-&amp;gt;&lt;/span&gt;owner, &lt;span style="color:#b44"&gt;&amp;#34;threads&amp;#34;&lt;/span&gt;, ss_plugin_state_type&lt;span style="color:#666"&gt;::&lt;/span&gt;SS_PLUGIN_ST_INT64);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#080;font-style:italic"&gt;// get an accessor to the subtable field
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; ret&lt;span style="color:#666"&gt;-&amp;gt;&lt;/span&gt;table_field_fdtable &lt;span style="color:#666"&gt;=&lt;/span&gt; in&lt;span style="color:#666"&gt;-&amp;gt;&lt;/span&gt;tables&lt;span style="color:#666"&gt;-&amp;gt;&lt;/span&gt;fields.get_table_field(ret&lt;span style="color:#666"&gt;-&amp;gt;&lt;/span&gt;thread_table, &lt;span style="color:#b44"&gt;&amp;#34;file_descriptors&amp;#34;&lt;/span&gt;, ss_plugin_state_type&lt;span style="color:#666"&gt;::&lt;/span&gt;SS_PLUGIN_ST_TABLE);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#080;font-style:italic"&gt;// create a new table entry
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#a2f;font-weight:bold"&gt;auto&lt;/span&gt; entry &lt;span style="color:#666"&gt;=&lt;/span&gt; in&lt;span style="color:#666"&gt;-&amp;gt;&lt;/span&gt;tables&lt;span style="color:#666"&gt;-&amp;gt;&lt;/span&gt;writer_ext&lt;span style="color:#666"&gt;-&amp;gt;&lt;/span&gt;create_table_entry(ret&lt;span style="color:#666"&gt;-&amp;gt;&lt;/span&gt;thread_table);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#080;font-style:italic"&gt;// read the subtable handle from the new entry
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; ss_plugin_state_data data;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; in&lt;span style="color:#666"&gt;-&amp;gt;&lt;/span&gt;tables&lt;span style="color:#666"&gt;-&amp;gt;&lt;/span&gt;reader_ext&lt;span style="color:#666"&gt;-&amp;gt;&lt;/span&gt;read_entry_field(ret&lt;span style="color:#666"&gt;-&amp;gt;&lt;/span&gt;thread_table, entry, ret&lt;span style="color:#666"&gt;-&amp;gt;&lt;/span&gt;table_field_fdtable, &lt;span style="color:#666"&gt;&amp;amp;&lt;/span&gt;data);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#a2f;font-weight:bold"&gt;auto&lt;/span&gt; fdtable &lt;span style="color:#666"&gt;=&lt;/span&gt; data.table;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#080;font-style:italic"&gt;//obtain the accessor to one of the subtable fields
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; ret&lt;span style="color:#666"&gt;-&amp;gt;&lt;/span&gt;table_field_fdtable_name &lt;span style="color:#666"&gt;=&lt;/span&gt; in&lt;span style="color:#666"&gt;-&amp;gt;&lt;/span&gt;tables&lt;span style="color:#666"&gt;-&amp;gt;&lt;/span&gt;fields_ext&lt;span style="color:#666"&gt;-&amp;gt;&lt;/span&gt;get_table_field(fdtable, &lt;span style="color:#b44"&gt;&amp;#34;name&amp;#34;&lt;/span&gt;, ss_plugin_state_type&lt;span style="color:#666"&gt;::&lt;/span&gt;SS_PLUGIN_ST_STRING);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#080;font-style:italic"&gt;//destroy the temporary entry
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; in&lt;span style="color:#666"&gt;-&amp;gt;&lt;/span&gt;tables&lt;span style="color:#666"&gt;-&amp;gt;&lt;/span&gt;writer_ext&lt;span style="color:#666"&gt;-&amp;gt;&lt;/span&gt;destroy_table_entry(ret&lt;span style="color:#666"&gt;-&amp;gt;&lt;/span&gt;thread_table, entry);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="accessing-tables"&gt;Accessing Tables&lt;/h3&gt;
&lt;p&gt;After obtaining accessors for all the tables and fields a given plugin is interested into, they can be used for performing operations over tables at runtime. Table operations are split in the two &amp;quot;reading&amp;quot; and &amp;quot;writing&amp;quot; categories, each having their own vtable and set of functions. The &amp;quot;reader&amp;quot; and the &amp;quot;writer&amp;quot; vtables are passed to the interested plugin functions for different capabilities, depending on their scope. For example, the &lt;code&gt;extract_fields&lt;/code&gt; function of the field extraction capability gets passed the state tables reader vtable, whereas the &lt;code&gt;parse_event&lt;/code&gt; function of the event parsing capability has access to both the reader and writer vtables. This enforces users to only apply state tables modifications at event parsing time, leaving field extraction a &amp;quot;stateless&amp;quot; code path. The reader and writer vtables and their respective functions are reported below.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-CPP" data-lang="CPP"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#080;font-style:italic"&gt;// Vtable for controlling a state table for read operations.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;typedef&lt;/span&gt; &lt;span style="color:#a2f;font-weight:bold"&gt;struct&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#080;font-style:italic"&gt;// Returns the table&amp;#39;s name, or NULL in case of error.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#080;font-style:italic"&gt;// The returned pointer is owned by the table&amp;#39;s owner.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#a2f;font-weight:bold"&gt;const&lt;/span&gt; &lt;span style="color:#0b0;font-weight:bold"&gt;char&lt;/span&gt;&lt;span style="color:#666"&gt;*&lt;/span&gt; (&lt;span style="color:#666"&gt;*&lt;/span&gt;get_table_name)(ss_plugin_table_t&lt;span style="color:#666"&gt;*&lt;/span&gt; t);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#080;font-style:italic"&gt;//
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#080;font-style:italic"&gt;// Returns the number of entries in the table, or ((uint64_t) -1) in
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#080;font-style:italic"&gt;// case of error.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#0b0;font-weight:bold"&gt;uint64_t&lt;/span&gt; (&lt;span style="color:#666"&gt;*&lt;/span&gt;get_table_size)(ss_plugin_table_t&lt;span style="color:#666"&gt;*&lt;/span&gt; t);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#080;font-style:italic"&gt;//
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#080;font-style:italic"&gt;// Returns an opaque pointer to an entry present in the table at the given
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#080;font-style:italic"&gt;// key, or NULL in case of issues (including if no entry is found at the
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#080;font-style:italic"&gt;// given key). The returned pointer is owned by the table&amp;#39;s owner.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; ss_plugin_table_entry_t&lt;span style="color:#666"&gt;*&lt;/span&gt; (&lt;span style="color:#666"&gt;*&lt;/span&gt;get_table_entry)(ss_plugin_table_t&lt;span style="color:#666"&gt;*&lt;/span&gt; t, &lt;span style="color:#a2f;font-weight:bold"&gt;const&lt;/span&gt; ss_plugin_state_data&lt;span style="color:#666"&gt;*&lt;/span&gt; key);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#080;font-style:italic"&gt;//
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#080;font-style:italic"&gt;// Reads the value of an entry field from a table&amp;#39;s entry.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#080;font-style:italic"&gt;// The field accessor must be obtained during plugin_init().
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#080;font-style:italic"&gt;// The read value is stored in the &amp;#34;out&amp;#34; parameter.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#080;font-style:italic"&gt;// Returns SS_PLUGIN_SUCCESS if successful, and SS_PLUGIN_FAILURE otherwise.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; ss_plugin_rc (&lt;span style="color:#666"&gt;*&lt;/span&gt;read_entry_field)(ss_plugin_table_t&lt;span style="color:#666"&gt;*&lt;/span&gt; t, ss_plugin_table_entry_t&lt;span style="color:#666"&gt;*&lt;/span&gt; e, &lt;span style="color:#a2f;font-weight:bold"&gt;const&lt;/span&gt; ss_plugin_table_field_t&lt;span style="color:#666"&gt;*&lt;/span&gt; f, ss_plugin_state_data&lt;span style="color:#666"&gt;*&lt;/span&gt; out);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;} ss_plugin_table_reader_vtable;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#080;font-style:italic"&gt;// Vtable for controlling a state table for write operations.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;typedef&lt;/span&gt; &lt;span style="color:#a2f;font-weight:bold"&gt;struct&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#080;font-style:italic"&gt;// Erases all the entries of the table.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#080;font-style:italic"&gt;// Returns SS_PLUGIN_SUCCESS if successful, and SS_PLUGIN_FAILURE otherwise.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; ss_plugin_rc (&lt;span style="color:#666"&gt;*&lt;/span&gt;clear_table)(ss_plugin_table_t&lt;span style="color:#666"&gt;*&lt;/span&gt; t);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#080;font-style:italic"&gt;//
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#080;font-style:italic"&gt;// Erases an entry from a table at the given key.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#080;font-style:italic"&gt;// Returns SS_PLUGIN_SUCCESS if successful, and SS_PLUGIN_FAILURE otherwise.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; ss_plugin_rc (&lt;span style="color:#666"&gt;*&lt;/span&gt;erase_table_entry)(ss_plugin_table_t&lt;span style="color:#666"&gt;*&lt;/span&gt; t, &lt;span style="color:#a2f;font-weight:bold"&gt;const&lt;/span&gt; ss_plugin_state_data&lt;span style="color:#666"&gt;*&lt;/span&gt; key);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#080;font-style:italic"&gt;//
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#080;font-style:italic"&gt;// Creates a new entry that can later be added to the same table it was
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#080;font-style:italic"&gt;// created from. The entry is represented as an opaque pointer owned
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#080;font-style:italic"&gt;// by the plugin. Once obtained, the plugin can either add the entry
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#080;font-style:italic"&gt;// to the table through add_table_entry(), or destroy it through
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#080;font-style:italic"&gt;// destroy_table_entry(). Returns an opaque pointer to the newly-created
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#080;font-style:italic"&gt;// entry, or NULL in case of error.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; ss_plugin_table_entry_t&lt;span style="color:#666"&gt;*&lt;/span&gt; (&lt;span style="color:#666"&gt;*&lt;/span&gt;create_table_entry)(ss_plugin_table_t&lt;span style="color:#666"&gt;*&lt;/span&gt; t);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#080;font-style:italic"&gt;//
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#080;font-style:italic"&gt;// Destroys a table entry obtained by from previous invocation of create_table_entry().
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#0b0;font-weight:bold"&gt;void&lt;/span&gt; (&lt;span style="color:#666"&gt;*&lt;/span&gt;destroy_table_entry)(ss_plugin_table_t&lt;span style="color:#666"&gt;*&lt;/span&gt; t, ss_plugin_table_entry_t&lt;span style="color:#666"&gt;*&lt;/span&gt; e);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#080;font-style:italic"&gt;//
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#080;font-style:italic"&gt;// Adds a new entry to a table obtained by from previous invocation of
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#080;font-style:italic"&gt;// create_table_entry() on the same table. The entry is inserted in the table
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#080;font-style:italic"&gt;// with the given key. If another entry is already present with the same key,
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#080;font-style:italic"&gt;// it gets replaced. After insertion, table will be come the owner of the
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#080;font-style:italic"&gt;// entry&amp;#39;s pointer. Returns an opaque pointer to the newly-added table&amp;#39;s entry,
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#080;font-style:italic"&gt;// or NULL in case of error.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; ss_plugin_table_entry_t&lt;span style="color:#666"&gt;*&lt;/span&gt; (&lt;span style="color:#666"&gt;*&lt;/span&gt;add_table_entry)(ss_plugin_table_t&lt;span style="color:#666"&gt;*&lt;/span&gt; t, &lt;span style="color:#a2f;font-weight:bold"&gt;const&lt;/span&gt; ss_plugin_state_data&lt;span style="color:#666"&gt;*&lt;/span&gt; key, ss_plugin_table_entry_t&lt;span style="color:#666"&gt;*&lt;/span&gt; entry);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#080;font-style:italic"&gt;//
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#080;font-style:italic"&gt;// Updates a table&amp;#39;s entry by writing a value for one of its fields.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#080;font-style:italic"&gt;// The field accessor must be obtained during plugin_init().
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#080;font-style:italic"&gt;// The written value is read from the &amp;#34;in&amp;#34; parameter.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#080;font-style:italic"&gt;// Returns SS_PLUGIN_SUCCESS if successful, and SS_PLUGIN_FAILURE otherwise.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; ss_plugin_rc (&lt;span style="color:#666"&gt;*&lt;/span&gt;write_entry_field)(ss_plugin_table_t&lt;span style="color:#666"&gt;*&lt;/span&gt; t, ss_plugin_table_entry_t&lt;span style="color:#666"&gt;*&lt;/span&gt; e, &lt;span style="color:#a2f;font-weight:bold"&gt;const&lt;/span&gt; ss_plugin_table_field_t&lt;span style="color:#666"&gt;*&lt;/span&gt; f, &lt;span style="color:#a2f;font-weight:bold"&gt;const&lt;/span&gt; ss_plugin_state_data&lt;span style="color:#666"&gt;*&lt;/span&gt; in);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;} ss_plugin_table_writer_vtable;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="accessing-subtables"&gt;Accessing subtables&lt;/h3&gt;
&lt;p&gt;Subtables handles can be obtained just like any other field, by reading the &lt;code&gt;table&lt;/code&gt; type field of an entry.&lt;/p&gt;
&lt;p&gt;After obtaining subtables handles and &lt;a href="https://v0-43--falcosecurity.netlify.app/docs/reference/plugins/plugin-api-reference/#obtaining-subtables-accessors"&gt;fields accessors&lt;/a&gt;, accessing subtables is the same as accessing regular tables.&lt;/p&gt;
&lt;p&gt;The following example shows how to access fields from the &lt;code&gt;file_descriptors&lt;/code&gt; subtable from one of the entries of the &lt;code&gt;threads&lt;/code&gt; table:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-CPP" data-lang="CPP"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;ss_plugin_rc &lt;span style="color:#00a000"&gt;plugin_parse_event&lt;/span&gt;(ss_plugin_t &lt;span style="color:#666"&gt;*&lt;/span&gt;s, &lt;span style="color:#a2f;font-weight:bold"&gt;const&lt;/span&gt; ss_plugin_event_input &lt;span style="color:#666"&gt;*&lt;/span&gt;ev, &lt;span style="color:#a2f;font-weight:bold"&gt;const&lt;/span&gt; ss_plugin_event_parse_input&lt;span style="color:#666"&gt;*&lt;/span&gt; in)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; plugin_state &lt;span style="color:#666"&gt;*&lt;/span&gt;ps &lt;span style="color:#666"&gt;=&lt;/span&gt; (plugin_state &lt;span style="color:#666"&gt;*&lt;/span&gt;) s;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; ss_plugin_state_data tmp;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#080;font-style:italic"&gt;// get an entry from the thread table
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; tmp.s64 &lt;span style="color:#666"&gt;=&lt;/span&gt; ev&lt;span style="color:#666"&gt;-&amp;gt;&lt;/span&gt;evt&lt;span style="color:#666"&gt;-&amp;gt;&lt;/span&gt;tid;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; ss_plugin_table_entry_t&lt;span style="color:#666"&gt;*&lt;/span&gt; thread_entry &lt;span style="color:#666"&gt;=&lt;/span&gt; in&lt;span style="color:#666"&gt;-&amp;gt;&lt;/span&gt;table_reader_ext&lt;span style="color:#666"&gt;-&amp;gt;&lt;/span&gt;get_table_entry(ps&lt;span style="color:#666"&gt;-&amp;gt;&lt;/span&gt;thread_table, &lt;span style="color:#666"&gt;&amp;amp;&lt;/span&gt;tmp);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#080;font-style:italic"&gt;// read the file_descriptors field from the entry
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; in&lt;span style="color:#666"&gt;-&amp;gt;&lt;/span&gt;table_reader_ext&lt;span style="color:#666"&gt;-&amp;gt;&lt;/span&gt;read_entry_field(ps&lt;span style="color:#666"&gt;-&amp;gt;&lt;/span&gt;thread_table, thread_entry, ps&lt;span style="color:#666"&gt;-&amp;gt;&lt;/span&gt;table_field_fdtable, &lt;span style="color:#666"&gt;&amp;amp;&lt;/span&gt;tmp);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; ss_plugin_table_t&lt;span style="color:#666"&gt;*&lt;/span&gt; fdtable &lt;span style="color:#666"&gt;=&lt;/span&gt; tmp.table;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#080;font-style:italic"&gt;// get an entry from the file descriptors table of the previously read thread
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; tmp.s64 &lt;span style="color:#666"&gt;=&lt;/span&gt; &lt;span style="color:#666"&gt;0&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; ss_plugin_table_entry_t&lt;span style="color:#666"&gt;*&lt;/span&gt; fd_entry &lt;span style="color:#666"&gt;=&lt;/span&gt; in&lt;span style="color:#666"&gt;-&amp;gt;&lt;/span&gt;table_reader_ext&lt;span style="color:#666"&gt;-&amp;gt;&lt;/span&gt;get_table_entry(fdtable, &lt;span style="color:#666"&gt;&amp;amp;&lt;/span&gt;tmp);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#080;font-style:italic"&gt;// read a field from the entry in the file descriptors table
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; in&lt;span style="color:#666"&gt;-&amp;gt;&lt;/span&gt;table_reader_ext&lt;span style="color:#666"&gt;-&amp;gt;&lt;/span&gt;read_entry_field(fdtable, fd_entry, ps&lt;span style="color:#666"&gt;-&amp;gt;&lt;/span&gt;table_field_fdtable_name, &lt;span style="color:#666"&gt;&amp;amp;&lt;/span&gt;tmp);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="registering-state-tables"&gt;Registering State Tables&lt;/h3&gt;
&lt;p&gt;On top of accessing tables owned by the framework or other plugins, each plugin can also make part (or all) of its state available to other actors in the framework in the form of state tables. In this case, the plugin is responsible of providing all the necessary vtables and their respective functions, just like the Falcosecurity libraries do for the tables owned by them (e.g. the &lt;code&gt;threads&lt;/code&gt; table). Plugins have total freedom towards how the table is actually implemented, as long as they respect the API functions in the vtables and they own all the memory related to the table and its entries. Plugins also have the freedom of not supporting some of the functions of the vtables, however they are not allowed to pass NULL-pointing function references. The struct by which plugins register their state table and the related vtable functions is reported below.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-CPP" data-lang="CPP"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#080;font-style:italic"&gt;// Plugin-provided input passed to the add_table() callback of
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#080;font-style:italic"&gt;// ss_plugin_init_tables_input, that can be used by the plugin to inform its
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#080;font-style:italic"&gt;// owner about one of the state tables owned by the plugin. The plugin
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#080;font-style:italic"&gt;// is responsible of owning all the memory pointed by this struct and
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#080;font-style:italic"&gt;// of implementing all the API functions. These will be used by other
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#080;font-style:italic"&gt;// plugins loaded by the falcosecurity libraries to interact with the state
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#080;font-style:italic"&gt;// of a given plugin to implement cross-plugin state access.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;typedef&lt;/span&gt; &lt;span style="color:#a2f;font-weight:bold"&gt;struct&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#080;font-style:italic"&gt;// The name of the state table.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#a2f;font-weight:bold"&gt;const&lt;/span&gt; &lt;span style="color:#0b0;font-weight:bold"&gt;char&lt;/span&gt;&lt;span style="color:#666"&gt;*&lt;/span&gt; name;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#080;font-style:italic"&gt;//
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#080;font-style:italic"&gt;// The type of the sta table&amp;#39;s key.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; ss_plugin_state_type key_type;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#080;font-style:italic"&gt;//
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#080;font-style:italic"&gt;// A non-NULL opaque pointer to the state table.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#080;font-style:italic"&gt;// This will be passed as parameters to all the callbacks defined below.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; ss_plugin_table_t&lt;span style="color:#666"&gt;*&lt;/span&gt; table;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#080;font-style:italic"&gt;//
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#080;font-style:italic"&gt;// Vtable for controlling read operations on the state table.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; ss_plugin_table_reader_vtable reader;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#080;font-style:italic"&gt;//
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#080;font-style:italic"&gt;// Vtable for controlling write operations on the state table.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; ss_plugin_table_writer_vtable writer;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#080;font-style:italic"&gt;//
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#080;font-style:italic"&gt;// Vtable for controlling operations related to fields on the state table.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; ss_plugin_table_fields_vtable fields;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;} ss_plugin_table_input;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="thread-safety-and-reproducibility"&gt;Thread-safety and Reproducibility&lt;/h3&gt;
&lt;p&gt;State access is not thread-safe. Operations related to either discovery, reading, or writing, must all be executed in the synchronous context and within the thread in which the framework invokes the given plugin function that is capable of accessing tables. For example, plugins are only allowed to read from a table during the execution of &lt;code&gt;extract_fields&lt;/code&gt; or &lt;code&gt;parse_event&lt;/code&gt;, but they are not allowed to launch an asynchronous thread that reuses the same accessors to read from a table after any of those functions have returned.&lt;/p&gt;
&lt;p&gt;Also, the previous sections imply that state tables can be operated on during the execution of various plugin functions, but that however only the &lt;code&gt;parse_event&lt;/code&gt; function of the event parsing capability can perform write operations. This is by purpose and design due to the architecture of the Falcosecurity libraries themselves.&lt;/p&gt;
&lt;p&gt;There may be use cases when the state update results of some asynchronous job and computation. For example, the Falcosecurity libraries implement the container metadata enrichment support by connecting to one or more container runtime sockets and fetching information asynchronously using a separate thread of the main event processing loop. In those cases, state updates must still happen synchronously. The &lt;a href="https://v0-43--falcosecurity.netlify.app/docs/reference/plugins/plugin-api-reference/#async-events-capability-api"&gt;async events capability&lt;/a&gt; is the strategy provided by the plugin framework. With that, plugins are provided with a thread-safe callback that they can use to inject asynchronous events in the currently-open event stream, and the framework will guarantee those events to be later received by functions such as &lt;code&gt;parse_event&lt;/code&gt; or &lt;code&gt;extract_fields&lt;/code&gt; just like any other events. Plugins can only safely utilize asynchronously-obtained information for state updates and field extraction through this messaging-like communication mode.&lt;/p&gt;
&lt;p&gt;An additional effect of injecting asynchronous events in an event stream is that they can so be recorded in SCAP capture files, thus being reproducible when reading events later from that capture files. By having the asynchronous information recorded in the event stream, the event parsing and field extraction plugin functions will be able to work just like in live capture mode by also making all the state transitions reproducible and deterministic.&lt;/p&gt;</description></item><item><title>Docs: Default and Local Rules Files</title><link>https://v0-43--falcosecurity.netlify.app/docs/concepts/rules/default-custom/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://v0-43--falcosecurity.netlify.app/docs/concepts/rules/default-custom/</guid><description>
&lt;p&gt;Falco comes with a default rules file that is loaded if no specific configuration is provided. However, that can be completely customized in several ways, depending on how Falco is installed. There are several ways to specify the location of your custom rules, download them, and keep them up to date.&lt;/p&gt;
&lt;h2 id="the-configuration-file"&gt;The configuration file&lt;/h2&gt;
&lt;p&gt;The default configuration file, &lt;a href="https://github.com/falcosecurity/falco/blob/master/falco.yaml"&gt;&lt;code&gt;/etc/falco/falco.yaml&lt;/code&gt;&lt;/a&gt; makes Falco load rules from the &lt;code&gt;/etc/falco/falco_rules.yaml&lt;/code&gt; file, followed by any custom rules located in the &lt;code&gt;/etc/falco/falco_rules.local.yaml&lt;/code&gt; file, followed by any custom rules located in the &lt;code&gt;/etc/falco/rules.d&lt;/code&gt; directory. This configuration is governed by the &lt;code&gt;rules_files&lt;/code&gt; key:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;rules_files:
- /etc/falco/falco_rules.yaml
- /etc/falco/falco_rules.local.yaml
- /etc/falco/rules.d
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Changing these configuration entries will affect the location and loading order of the rules files.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;You can find the details of the available default rules in this &lt;a href="https://v0-43--falcosecurity.netlify.app/docs/reference/rules/default-rules/"&gt;page&lt;/a&gt; or in the Falco rules auto-generated &lt;a href="https://falcosecurity.github.io/rules/"&gt;&lt;strong&gt;documentation&lt;/strong&gt;&lt;/a&gt;.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;If you are running Falco directly from the command line, you can use the &lt;code&gt;-r&lt;/code&gt; switch to load as many rules files as needed. Is it possible to provide &lt;code&gt;-r&lt;/code&gt; with the path of a single file or directory (in this latter case, all the rules files in the directory will be loaded). The switch can be specified multiple times; if is specified at least once, the &lt;code&gt;rules_files&lt;/code&gt; key in the configuration file is ignored.
e.g.:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;# falco -r /path/to/my/rules1.yaml -r /path/to/my/rules2.yaml
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id="falcoctl"&gt;Falcoctl&lt;/h2&gt;
&lt;p&gt;The &lt;a href="https://github.com/falcosecurity/falcoctl"&gt;falcoctl&lt;/a&gt; tool provides functionality to download and update rules files distributed as OCI artifacts. The &lt;code&gt;install&lt;/code&gt; command of the &lt;a href="https://github.com/falcosecurity/falcoctl"&gt;falcoctl&lt;/a&gt; tool will download rules files to a configurable directory (by default, that is &lt;code&gt;/etc/falco&lt;/code&gt;). For instance, to install a specific version of the default rules file in &lt;code&gt;/etc/falco&lt;/code&gt; you can run the following commands:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;# falcoctl index add falcosecurity https://falcosecurity.github.io/falcoctl/index.yaml
# falcoctl artifact install falco-rules:3.2.0
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Falcoctl is available as a standalone tool, included in Falco packages and container images, automatically installed as a systemd unit or deployed as an init container via the Helm chart.&lt;/p&gt;
&lt;h2 id="rules-installed-via-the-helm-chart"&gt;Rules installed via the Helm chart&lt;/h2&gt;
&lt;p&gt;If you install the &lt;a href="https://github.com/falcosecurity/charts"&gt;Helm chart&lt;/a&gt;, at least version 3.0.0 with:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;helm install falco
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Falco, by default, will &lt;strong&gt;load the latest rules file&lt;/strong&gt; that is compatible with your Falco version and &lt;strong&gt;keep it up to date automatically&lt;/strong&gt; via falcoctl. These are published &lt;a href="https://github.com/falcosecurity/rules/pkgs/container/rules%2Ffalco-rules"&gt;on GitHub Packages&lt;/a&gt;.&lt;/p&gt;
&lt;h3 id="use-the-rules-embedded-in-the-falco-image"&gt;Use the rules embedded in the Falco image&lt;/h3&gt;
&lt;p&gt;The Falco image ships with a snapshot of the latest version of the official Falco rules. If you wish to use that without downloading anything at runtime, you can install Falco with:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;helm install falco \
--set falcoctl.artifact.install.enabled=false \
--set falcoctl.artifact.follow.enabled=false
&lt;/code&gt;&lt;/pre&gt;&lt;h3 id="add-custom-rules-with-a-configmap"&gt;Add custom rules with a configmap&lt;/h3&gt;
&lt;p&gt;You can always use the &lt;code&gt;customRules&lt;/code&gt; value to add your own custom rules in a configmap. For instance, if we create a file as &lt;a href="https://github.com/falcosecurity/charts/tree/master/charts/falco#loading-custom-rules"&gt;described in the documentation&lt;/a&gt;, and then add it to our install command above as follows:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;helm install falco \
--set falcoctl.artifact.install.enabled=false \
--set falcoctl.artifact.follow.enabled=false \
-f custom_rules.yaml
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;or if you have already installed falco, you can use the &lt;code&gt;helm upgrade -i&lt;/code&gt;&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;helm upgrade -i falco \
--set falcoctl.artifact.install.enabled=false \
--set falcoctl.artifact.follow.enabled=false \
-f custom_rules.yaml
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;it will be loaded and configured in our Falco instance and you can verify changes by checking the falco daemonset container logs with the command below:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;kubectl logs -n falco daemonsets/falco
&lt;/code&gt;&lt;/pre&gt;&lt;blockquote&gt;
&lt;p&gt;Notice: the new rule files described in &lt;code&gt;customRules&lt;/code&gt; will be placed in the &lt;code&gt;/etc/falco/rules.d&lt;/code&gt; directory, and will be loaded following the order specified in the configuration file: in the default configuration, this means that will be loaded after &lt;code&gt;/etc/falco/falco.yaml&lt;/code&gt; and &lt;code&gt;/etc/falco/falco_rules.local.yaml&lt;/code&gt; rules files.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="only-use-rules-supplied-via-configmap"&gt;Only use rules supplied via configmap&lt;/h2&gt;
&lt;p&gt;If you only want to use the rules that you add via configmap, discarding all automated updates and default rules shipped in the image, you have to remove the &lt;code&gt;falco_rules.yaml&lt;/code&gt; and &lt;code&gt;falco_rules.local.yaml&lt;/code&gt; entries from the Falco configuration. Assuming you have your custom rules in &lt;code&gt;custom_rules.yaml&lt;/code&gt;:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;helm install falco -f ./custom_rules.yaml \
--set &amp;#34;falco.rules_files={/etc/falco/rules.d}&amp;#34; \
--set falcoctl.artifact.install.enabled=false \
--set falcoctl.artifact.follow.enabled=false
&lt;/code&gt;&lt;/pre&gt;</description></item><item><title>Docs: Default Macros</title><link>https://v0-43--falcosecurity.netlify.app/docs/reference/rules/default-macros/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://v0-43--falcosecurity.netlify.app/docs/reference/rules/default-macros/</guid><description>
&lt;p&gt;The default Falco rule set defines a number of macros that makes it easier to start writing rules. These macros provide shortcuts for a number of common scenarios and can be used in any user defined rule sets.&lt;/p&gt;
&lt;p&gt;Falco also provide Macros that should be overridden. Refer &lt;a href="https://v0-43--falcosecurity.netlify.app/docs/reference/rules/macros-override/"&gt;here&lt;/a&gt; for further information.&lt;/p&gt;
&lt;h3 id="file-opened-for-writing"&gt;File Opened for Writing&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;- &lt;span style="color:#008000;font-weight:bold"&gt;macro&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;open_write&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;condition&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;(evt.type=open or evt.type=openat) and evt.is_open_write=true and fd.typechar=&amp;#39;f&amp;#39; and fd.num&amp;gt;=0&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3 id="file-opened-for-reading"&gt;File Opened for Reading&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;- &lt;span style="color:#008000;font-weight:bold"&gt;macro&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;open_read&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;condition&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;(evt.type=open or evt.type=openat) and evt.is_open_read=true and fd.typechar=&amp;#39;f&amp;#39; and fd.num&amp;gt;=0&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3 id="never-true"&gt;Never True&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;- &lt;span style="color:#008000;font-weight:bold"&gt;macro&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;never_true&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;condition&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;(evt.num=0)&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3 id="always-true"&gt;Always True&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;- &lt;span style="color:#008000;font-weight:bold"&gt;macro&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;always_true&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;condition&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;(evt.num=&amp;gt;0)&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3 id="proc-name-is-set"&gt;Proc Name is Set&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;- &lt;span style="color:#008000;font-weight:bold"&gt;macro&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;proc_name_exists&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;condition&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;(proc.name!=&amp;#34;&amp;lt;NA&amp;gt;&amp;#34;)&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3 id="file-system-object-renamed"&gt;File System Object Renamed&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;- &lt;span style="color:#008000;font-weight:bold"&gt;macro&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;rename&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;condition&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;evt.type in (rename, renameat)&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3 id="new-directory-created"&gt;New Directory Created&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;- &lt;span style="color:#008000;font-weight:bold"&gt;macro&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;mkdir&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;condition&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;evt.type = mkdir&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3 id="file-system-object-removed"&gt;File System Object Removed&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;- &lt;span style="color:#008000;font-weight:bold"&gt;macro&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;remove&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;condition&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;evt.type in (rmdir, unlink, unlinkat)&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3 id="file-system-object-modified"&gt;File System Object Modified&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;- &lt;span style="color:#008000;font-weight:bold"&gt;macro&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;modify&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;condition&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;rename or remove&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3 id="new-process-spawned"&gt;New Process Spawned&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;- &lt;span style="color:#008000;font-weight:bold"&gt;macro&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;spawned_process&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;condition&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;(evt.type in (execve, execveat))&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3 id="common-directories-for-binaries"&gt;Common Directories for Binaries&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;- &lt;span style="color:#008000;font-weight:bold"&gt;macro&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;bin_dir&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;condition&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;fd.directory in (/bin, /sbin, /usr/bin, /usr/sbin)&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3 id="shell-is-started"&gt;Shell is Started&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;- &lt;span style="color:#008000;font-weight:bold"&gt;macro&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;shell_procs&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;condition&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;(proc.name in (shell_binaries))&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3 id="known-sensitive-files"&gt;Known Sensitive Files&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;- &lt;span style="color:#008000;font-weight:bold"&gt;macro&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;sensitive_files&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;condition&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;&amp;gt;&lt;span style="color:#b44;font-style:italic"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#b44;font-style:italic"&gt; fd.name startswith /etc and
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#b44;font-style:italic"&gt; (fd.name in (sensitive_file_names)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#b44;font-style:italic"&gt; or fd.directory in (/etc/sudoers.d, /etc/pam.d))&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3 id="newly-created-process"&gt;Newly Created Process&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;- &lt;span style="color:#008000;font-weight:bold"&gt;macro&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;proc_is_new&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;condition&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;proc.duration &amp;lt;= 5000000000&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3 id="inbound-network-connections"&gt;Inbound Network Connections&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;- &lt;span style="color:#008000;font-weight:bold"&gt;macro&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;inbound&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;condition&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;&amp;gt;&lt;span style="color:#b44;font-style:italic"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#b44;font-style:italic"&gt; ((evt.type in (accept,listen)) or
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#b44;font-style:italic"&gt; (fd.typechar = 4 or fd.typechar = 6) and
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#b44;font-style:italic"&gt; (fd.ip != &amp;#34;0.0.0.0&amp;#34; and fd.net != &amp;#34;127.0.0.0/8&amp;#34;) and (evt.rawres &amp;gt;= 0 or evt.res = EINPROGRESS))&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3 id="outbound-network-connections"&gt;Outbound Network Connections&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;- &lt;span style="color:#008000;font-weight:bold"&gt;macro&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;outbound&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;condition&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;&amp;gt;&lt;span style="color:#b44;font-style:italic"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#b44;font-style:italic"&gt; ((evt.type = connect) or
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#b44;font-style:italic"&gt; (fd.typechar = 4 or fd.typechar = 6) and
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#b44;font-style:italic"&gt; (fd.ip != &amp;#34;0.0.0.0&amp;#34; and fd.net != &amp;#34;127.0.0.0/8&amp;#34;) and (evt.rawres &amp;gt;= 0 or evt.res = EINPROGRESS))&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3 id="inbound-or-outbound-network-connections"&gt;Inbound or Outbound Network Connections&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;- &lt;span style="color:#008000;font-weight:bold"&gt;macro&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;inbound_outbound&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;condition&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;&amp;gt;&lt;span style="color:#b44;font-style:italic"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#b44;font-style:italic"&gt; ((evt.type in (accept,listen,connect)) or
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#b44;font-style:italic"&gt; (fd.typechar = 4 or fd.typechar = 6) and
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#b44;font-style:italic"&gt; (fd.ip != &amp;#34;0.0.0.0&amp;#34; and fd.net != &amp;#34;127.0.0.0/8&amp;#34;) and (evt.rawres &amp;gt;= 0 or evt.res = EINPROGRESS))&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3 id="object-is-a-container"&gt;Object is a Container&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;- &lt;span style="color:#008000;font-weight:bold"&gt;macro&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;container&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;condition&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;container.id != host&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3 id="interactive-process-spawned"&gt;Interactive Process Spawned&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;- &lt;span style="color:#008000;font-weight:bold"&gt;macro&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;interactive&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;condition&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;&amp;gt;&lt;span style="color:#b44;font-style:italic"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#b44;font-style:italic"&gt; ((proc.aname=sshd and proc.name != sshd) or
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#b44;font-style:italic"&gt; proc.name=systemd-logind or proc.name=login)&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description></item><item><title>Docs: Deploy as a container</title><link>https://v0-43--falcosecurity.netlify.app/docs/setup/container/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://v0-43--falcosecurity.netlify.app/docs/setup/container/</guid><description>
&lt;div class="card card-sm pageinfo pageinfo-primary my-4"&gt;
&lt;div class="card-body"&gt;
&lt;div class="card-text"&gt;
&lt;p&gt;Falco consumes streams of events and evaluates them against a set of security &lt;a class='glossary-tooltip' title='Rules are conditions under which an alert should be generated.' data-toggle='tooltip' data-placement='top' href='https://v0-43--falcosecurity.netlify.app/docs/rules/basic-elements/#rules' target='_blank' aria-label='rules'&gt;rules&lt;/a&gt; to detect abnormal behavior. By default, Falco is pre-configured to consume events from the Linux Kernel. This scenario requires Falco to be privileged, and depending on the kernel version installed on the node, a &lt;a class='glossary-tooltip' title='The global term for the software that sends events from the kernel.' data-toggle='tooltip' data-placement='top' href='https://v0-43--falcosecurity.netlify.app/docs/concepts/event-sources/kernel/' target='_blank' aria-label='driver'&gt;driver&lt;/a&gt; will be installed on the node. Since orchestration systems like Kubernetes are out of scope for this section, it's up to the user to manage the container lifecycle and deployment across the nodes.&lt;/p&gt;
&lt;p&gt;For other installation scenarios, such as consuming cloud events or other data sources using plugins, please refer to the &lt;a href="https://v0-43--falcosecurity.netlify.app/docs/concepts/plugins/"&gt;Plugins&lt;/a&gt; section.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id="install"&gt;Install&lt;/h2&gt;
&lt;p&gt;This section describes how to run the Falco userspace process in a container using one of the released &lt;a href="https://v0-43--falcosecurity.netlify.app/docs/download#images"&gt;container images&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;By default, Falco is pre-configured to consume events from the Linux Kernel. For this default installation scenario, Falco can be run in two ways:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://v0-43--falcosecurity.netlify.app/docs/setup/container/#docker-privileged"&gt;Fully Privileged&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://v0-43--falcosecurity.netlify.app/docs/setup/container/#docker-least-privileged"&gt;Least Privileged (Recommended)&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Different instructions apply to each method depending on the driver used. Note that the &lt;strong&gt;&lt;a class='glossary-tooltip' title='More robust eBPF probe which brings the CO-RE paradigm, better performances and maintainability.' data-toggle='tooltip' data-placement='top' href='https://v0-43--falcosecurity.netlify.app/docs/concepts/event-sources/kernel/#modern-ebpf-probe' target='_blank' aria-label='Modern eBPF'&gt;Modern eBPF&lt;/a&gt; does not require driver installation&lt;/strong&gt;.&lt;/p&gt;
&lt;h3 id="docker-privileged"&gt;Fully Privileged&lt;/h3&gt;
&lt;p&gt;To run Falco in a container using Docker with full privileges, use the following commands:&lt;/p&gt;
&lt;h4 id="docker-privileged-modern-ebpf"&gt;Modern eBPF&lt;/h4&gt;
&lt;p&gt;The &lt;a class='glossary-tooltip' title='More robust eBPF probe which brings the CO-RE paradigm, better performances and maintainability.' data-toggle='tooltip' data-placement='top' href='https://v0-43--falcosecurity.netlify.app/docs/concepts/event-sources/kernel/#modern-ebpf-probe' target='_blank' aria-label='Modern eBPF'&gt;Modern eBPF&lt;/a&gt; is bundled into the Falco binary. This allows you to run Falco without dependencies by using the following command:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;docker pull falcosecurity/falco:0.43.0
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;docker run --rm -it &lt;span style="color:#b62;font-weight:bold"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; --privileged &lt;span style="color:#b62;font-weight:bold"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; -v /sys/kernel/tracing:/sys/kernel/tracing:ro &lt;span style="color:#b62;font-weight:bold"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; -v /var/run/docker.sock:/host/var/run/docker.sock &lt;span style="color:#b62;font-weight:bold"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; -v /proc:/host/proc:ro &lt;span style="color:#b62;font-weight:bold"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; -v /etc:/host/etc:ro &lt;span style="color:#b62;font-weight:bold"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; falcosecurity/falco:0.43.0
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="card card-sm pageinfo pageinfo-primary my-4"&gt;
&lt;div class="card-body"&gt;
&lt;div class="card-text"&gt;
&lt;p&gt;On some systems, &lt;code&gt;tracefs&lt;/code&gt; is available at &lt;code&gt;/sys/kernel/debug/tracing&lt;/code&gt; instead of &lt;code&gt;/sys/kernel/tracing&lt;/code&gt;. If this is the
case, please replace &lt;code&gt;-v /sys/kernel/tracing:/sys/kernel/tracing:ro&lt;/code&gt; with
&lt;code&gt;-v /sys/kernel/debug/tracing:/sys/kernel/tracing:ro&lt;/code&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="card card-sm pageinfo pageinfo-warning my-4"&gt;
&lt;div class="card-body"&gt;
&lt;div class="card-text"&gt;
&lt;p&gt;Mounting the host's &lt;code&gt;tracefs&lt;/code&gt; (i.e.: mounting the host &lt;code&gt;/sys/kernel/tracing&lt;/code&gt; path) is an optional but recommended
pre-requisite. By removing the &lt;code&gt;-v /sys/kernel/tracing:/sys/kernel/tracing:ro&lt;/code&gt; line from the above command, you will
reduce the amount of accesses granted to the container, but will not benefit anymore from TOCTOU mitigation support.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h4 id="docker-privileged-kernel-module"&gt;Kernel Module&lt;/h4&gt;
&lt;p&gt;For the &lt;a class='glossary-tooltip' title='The Kernel module collects syscalls events from the Kernel, as the modern eBPF probe does.' data-toggle='tooltip' data-placement='top' href='https://v0-43--falcosecurity.netlify.app/docs/concepts/event-sources/kernel/#kernel-module' target='_blank' aria-label='Kernel Module'&gt;Kernel Module&lt;/a&gt; driver, Falco requires the driver to be installed on the host system first.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Install the driver on the host system using the &lt;code&gt;falcosecurity/falco-driver-loader&lt;/code&gt; image, as described in the &lt;a href="https://v0-43--falcosecurity.netlify.app/docs/setup/container/#driver-installation-kernel-module"&gt;Driver Installation&lt;/a&gt; section.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Run Falco:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;docker pull falcosecurity/falco:0.43.0
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;docker run --rm -it &lt;span style="color:#b62;font-weight:bold"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; --privileged &lt;span style="color:#b62;font-weight:bold"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; -v /var/run/docker.sock:/host/var/run/docker.sock &lt;span style="color:#b62;font-weight:bold"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; -v /dev:/host/dev &lt;span style="color:#b62;font-weight:bold"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; -v /proc:/host/proc:ro &lt;span style="color:#b62;font-weight:bold"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; -v /etc:/host/etc:ro &lt;span style="color:#b62;font-weight:bold"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; falcosecurity/falco:0.43.0 falco -o engine.kind&lt;span style="color:#666"&gt;=&lt;/span&gt;kmod
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;h4 id="docker-privileged-ebpf"&gt;eBPF Probe&lt;/h4&gt;
&lt;p&gt;For the &lt;a class='glossary-tooltip' title='The eBPF probe (deprecated) collects syscall events from the Kernel, as the Kernel module does.' data-toggle='tooltip' data-placement='top' href='https://v0-43--falcosecurity.netlify.app/docs/concepts/event-sources/kernel/#legacy-ebpf-probe' target='_blank' aria-label='eBPF probe'&gt;eBPF probe&lt;/a&gt; driver, Falco requires the probe to be prepared and stored on the host system first (under &lt;code&gt;/root/.falco&lt;/code&gt;).&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Install the driver on the host system using the &lt;code&gt;falcosecurity/falco-driver-loader&lt;/code&gt; image, as described in the &lt;a href="https://v0-43--falcosecurity.netlify.app/docs/setup/container/#driver-installation-ebpf-probe"&gt;Driver Installation&lt;/a&gt; section.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Run Falco:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;docker pull falcosecurity/falco:0.43.0
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;docker run --rm -it &lt;span style="color:#b62;font-weight:bold"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; --privileged &lt;span style="color:#b62;font-weight:bold"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; -v /var/run/docker.sock:/host/var/run/docker.sock &lt;span style="color:#b62;font-weight:bold"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; -v /root/.falco:/root/.falco &lt;span style="color:#b62;font-weight:bold"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; -v /proc:/host/proc:ro &lt;span style="color:#b62;font-weight:bold"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; -v /etc:/host/etc:ro &lt;span style="color:#b62;font-weight:bold"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; falcosecurity/falco:0.43.0 falco -o engine.kind&lt;span style="color:#666"&gt;=&lt;/span&gt;ebpf
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#080;font-style:italic"&gt;# If running a kernel version &amp;lt; 4.14, add &amp;#39;-v /sys/kernel/debug:/sys/kernel/debug:ro \&amp;#39; to the above docker command.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id="docker-least-privileged"&gt;Least Privileged (Recommended)&lt;/h3&gt;
&lt;p&gt;To run Falco in a container using Docker with the &lt;a href="https://en.wikipedia.org/wiki/Principle_of_least_privilege"&gt;principle of least privilege&lt;/a&gt;, you can use the following commands depending on the driver you want to use.&lt;/p&gt;
&lt;h4 id="docker-least-privileged-modern-ebpf"&gt;Modern eBPF&lt;/h4&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;docker pull falcosecurity/falco:0.43.0
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;docker run --rm -it &lt;span style="color:#b62;font-weight:bold"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; --cap-drop all &lt;span style="color:#b62;font-weight:bold"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; --cap-add sys_admin &lt;span style="color:#b62;font-weight:bold"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; --cap-add sys_resource &lt;span style="color:#b62;font-weight:bold"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; --cap-add sys_ptrace &lt;span style="color:#b62;font-weight:bold"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; -v /sys/kernel/tracing:/sys/kernel/tracing:ro &lt;span style="color:#b62;font-weight:bold"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; -v /var/run/docker.sock:/host/var/run/docker.sock &lt;span style="color:#b62;font-weight:bold"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; -v /proc:/host/proc:ro &lt;span style="color:#b62;font-weight:bold"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; -v /etc:/host/etc:ro &lt;span style="color:#b62;font-weight:bold"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; falcosecurity/falco:0.43.0
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="card card-sm pageinfo pageinfo-primary my-4"&gt;
&lt;div class="card-body"&gt;
&lt;div class="card-text"&gt;
&lt;p&gt;The minimum set of capabilities to run Falco with the &lt;a class='glossary-tooltip' title='More robust eBPF probe which brings the CO-RE paradigm, better performances and maintainability.' data-toggle='tooltip' data-placement='top' href='https://v0-43--falcosecurity.netlify.app/docs/concepts/event-sources/kernel/#modern-ebpf-probe' target='_blank' aria-label='Modern eBPF'&gt;Modern eBPF&lt;/a&gt; driver are:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;CAP_SYS_PTRACE&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;CAP_SYS_RESOURCE&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;CAP_BPF&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;CAP_PERFMON&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;However, in the command above, we use &lt;code&gt;CAP_SYS_ADMIN&lt;/code&gt; because &lt;a href="https://github.com/moby/moby/pull/41563"&gt;Docker does not yet support&lt;/a&gt; &lt;code&gt;CAP_BPF&lt;/code&gt; and &lt;code&gt;CAP_PERFMON&lt;/code&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="card card-sm pageinfo pageinfo-primary my-4"&gt;
&lt;div class="card-body"&gt;
&lt;div class="card-text"&gt;
&lt;p&gt;On some systems, &lt;code&gt;tracefs&lt;/code&gt; is available at &lt;code&gt;/sys/kernel/debug/tracing&lt;/code&gt; instead of &lt;code&gt;/sys/kernel/tracing&lt;/code&gt;. If this is the
case, please replace &lt;code&gt;-v /sys/kernel/tracing:/sys/kernel/tracing:ro&lt;/code&gt; with
&lt;code&gt;-v /sys/kernel/debug/tracing:/sys/kernel/tracing:ro&lt;/code&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="card card-sm pageinfo pageinfo-warning my-4"&gt;
&lt;div class="card-body"&gt;
&lt;div class="card-text"&gt;
&lt;p&gt;Mounting the host's &lt;code&gt;tracefs&lt;/code&gt; (i.e.: mounting the host &lt;code&gt;/sys/kernel/tracing&lt;/code&gt; path) is an optional but recommended
pre-requisite. By removing the &lt;code&gt;-v /sys/kernel/tracing:/sys/kernel/tracing:ro&lt;/code&gt; line from the above command, you will
reduce the amount of accesses granted to the container, but will not benefit anymore from TOCTOU mitigation support.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h4 id="docker-least-privileged-kernel-module"&gt;Kernel Module&lt;/h4&gt;
&lt;p&gt;For the &lt;a class='glossary-tooltip' title='The Kernel module collects syscalls events from the Kernel, as the modern eBPF probe does.' data-toggle='tooltip' data-placement='top' href='https://v0-43--falcosecurity.netlify.app/docs/concepts/event-sources/kernel/#kernel-module' target='_blank' aria-label='Kernel Module'&gt;Kernel Module&lt;/a&gt; driver, Falco requires the driver to be installed on the host system first. This step requires full privileges, while the Falco container can then run with the least privileges.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Install the driver on the host system using the &lt;code&gt;falcosecurity/falco-driver-loader&lt;/code&gt; image, as described in the &lt;a href="https://v0-43--falcosecurity.netlify.app/docs/setup/container/#driver-installation-kernel-module"&gt;Driver Installation&lt;/a&gt; section.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Run Falco using the &lt;code&gt;falcosecurity/falco&lt;/code&gt; image with the least privileges:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;docker pull falcosecurity/falco:0.43.0
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;docker run --rm -it &lt;span style="color:#b62;font-weight:bold"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; -e &lt;span style="color:#b8860b"&gt;HOST_ROOT&lt;/span&gt;&lt;span style="color:#666"&gt;=&lt;/span&gt;/ &lt;span style="color:#b62;font-weight:bold"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; --cap-add SYS_PTRACE --pid&lt;span style="color:#666"&gt;=&lt;/span&gt;host &lt;span style="color:#a2f;font-weight:bold"&gt;$(&lt;/span&gt;ls /dev/falco* | xargs -I &lt;span style="color:#666"&gt;{}&lt;/span&gt; &lt;span style="color:#a2f"&gt;echo&lt;/span&gt; --device &lt;span style="color:#666"&gt;{}&lt;/span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;)&lt;/span&gt; &lt;span style="color:#b62;font-weight:bold"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; -v /var/run/docker.sock:/var/run/docker.sock &lt;span style="color:#b62;font-weight:bold"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; -v /etc:/host/etc:ro &lt;span style="color:#b62;font-weight:bold"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; falcosecurity/falco:0.43.0 falco -o engine.kind&lt;span style="color:#666"&gt;=&lt;/span&gt;kmod
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="card card-sm pageinfo pageinfo-primary my-4"&gt;
&lt;div class="card-body"&gt;
&lt;div class="card-text"&gt;
&lt;p&gt;Note that &lt;code&gt;ls /dev/falco* | xargs -I {} echo --device {}&lt;/code&gt; outputs a &lt;code&gt;--device /dev/falcoX&lt;/code&gt; option per CPU (i.e., just the devices created by the Falco's kernel module). Also, &lt;code&gt;-e HOST_ROOT=/&lt;/code&gt; is necessary since with &lt;code&gt;--device&lt;/code&gt; there is no way to remap devices to &lt;code&gt;/host/dev/&lt;/code&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="card card-sm pageinfo pageinfo-warning my-4"&gt;
&lt;div class="card-body"&gt;
&lt;div class="card-text"&gt;
&lt;p&gt;If you are running Falco on a system with the AppArmor LSM enabled (e.g., Ubuntu), you must also pass &lt;code&gt;--security-opt apparmor:unconfined&lt;/code&gt; to the &lt;code&gt;docker run&lt;/code&gt; command above.&lt;/p&gt;
&lt;p&gt;You can verify if you have AppArmor enabled using the command below:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;docker info | grep -i apparmor
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h4 id="docker-least-privileged-ebpf-probe"&gt;eBPF Probe&lt;/h4&gt;
&lt;p&gt;For the &lt;a class='glossary-tooltip' title='The eBPF probe (deprecated) collects syscall events from the Kernel, as the Kernel module does.' data-toggle='tooltip' data-placement='top' href='https://v0-43--falcosecurity.netlify.app/docs/concepts/event-sources/kernel/#legacy-ebpf-probe' target='_blank' aria-label='eBPF probe'&gt;eBPF probe&lt;/a&gt; driver, Falco requires the probe to be prepared and stored on the host system first (under &lt;code&gt;/root/.falco&lt;/code&gt;). This step requires full privileges, after which the Falco container can run with the least privileges.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Install the driver on the host system using the &lt;code&gt;falcosecurity/falco-driver-loader&lt;/code&gt; image, as described in the &lt;a href="https://v0-43--falcosecurity.netlify.app/docs/setup/container/#driver-installation-ebpf-probe"&gt;Driver Installation&lt;/a&gt; section.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Run Falco using the &lt;code&gt;falcosecurity/falco&lt;/code&gt; image with the least privileges:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;docker pull falcosecurity/falco:0.43.0
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;docker run --rm -it &lt;span style="color:#b62;font-weight:bold"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; --cap-drop all &lt;span style="color:#b62;font-weight:bold"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; --cap-add sys_admin &lt;span style="color:#b62;font-weight:bold"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; --cap-add sys_resource &lt;span style="color:#b62;font-weight:bold"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; --cap-add sys_ptrace &lt;span style="color:#b62;font-weight:bold"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; -v /var/run/docker.sock:/host/var/run/docker.sock &lt;span style="color:#b62;font-weight:bold"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; -v /root/.falco:/root/.falco &lt;span style="color:#b62;font-weight:bold"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; -v /proc:/host/proc:ro &lt;span style="color:#b62;font-weight:bold"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; -v /etc:/host/etc &lt;span style="color:#b62;font-weight:bold"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; falcosecurity/falco:0.43.0 falco -o engine.kind&lt;span style="color:#666"&gt;=&lt;/span&gt;ebpf
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#080;font-style:italic"&gt;# If running a kernel version &amp;lt; 4.14, add &amp;#39;-v /sys/kernel/debug:/sys/kernel/debug:ro \&amp;#39; to the above Docker command.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="card card-sm pageinfo pageinfo-warning my-4"&gt;
&lt;div class="card-body"&gt;
&lt;div class="card-text"&gt;
&lt;p&gt;If you are running Falco on a system with the AppArmor LSM enabled (e.g., Ubuntu), you must also pass &lt;code&gt;--security-opt apparmor:unconfined&lt;/code&gt; to
the &lt;code&gt;docker run&lt;/code&gt; command above.&lt;/p&gt;
&lt;p&gt;To verify if AppArmor is enabled, use the command below:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;docker info | grep -i apparmor
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="card card-sm pageinfo pageinfo-primary my-4"&gt;
&lt;div class="card-body"&gt;
&lt;div class="card-text"&gt;
&lt;p&gt;To run Falco with the least privileges using the eBPF probe, the following capabilities are required:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;On kernels &amp;lt;5.8, Falco requires &lt;code&gt;CAP_SYS_ADMIN&lt;/code&gt;, &lt;code&gt;CAP_SYS_RESOURCE&lt;/code&gt;, and &lt;code&gt;CAP_SYS_PTRACE&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;On kernels &amp;gt;=5.8, &lt;code&gt;CAP_BPF&lt;/code&gt; and &lt;code&gt;CAP_PERFMON&lt;/code&gt; were separated from &lt;code&gt;CAP_SYS_ADMIN&lt;/code&gt;, so the required capabilities are &lt;code&gt;CAP_BPF&lt;/code&gt;, &lt;code&gt;CAP_PERFMON&lt;/code&gt;, &lt;code&gt;CAP_SYS_RESOURCE&lt;/code&gt;, &lt;code&gt;CAP_SYS_PTRACE&lt;/code&gt;. Unfortunately, Docker does not yet support adding the two newly introduced capabilities with the &lt;code&gt;--cap-add&lt;/code&gt; option. For this reason, we continue using &lt;code&gt;CAP_SYS_ADMIN&lt;/code&gt;, which still allows performing the same operations granted by &lt;code&gt;CAP_BPF&lt;/code&gt; and &lt;code&gt;CAP_PERFMON&lt;/code&gt;. In the near future, Docker will support adding these two capabilities, and we will be able to replace &lt;code&gt;CAP_SYS_ADMIN&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id="driver-installation"&gt;Driver Installation&lt;/h2&gt;
&lt;p&gt;This section provides instructions for installing the driver on the host system using the &lt;code&gt;falcosecurity/falco-driver-loader&lt;/code&gt; image. This approach is helpful if you prefer to install the driver on the host first and then run Falco in a container later.&lt;/p&gt;
&lt;p&gt;Driver installation on the host is only required for the &lt;a class='glossary-tooltip' title='The Kernel module collects syscalls events from the Kernel, as the modern eBPF probe does.' data-toggle='tooltip' data-placement='top' href='https://v0-43--falcosecurity.netlify.app/docs/concepts/event-sources/kernel/#kernel-module' target='_blank' aria-label='Kernel Module'&gt;Kernel Module&lt;/a&gt; and &lt;a class='glossary-tooltip' title='The eBPF probe (deprecated) collects syscall events from the Kernel, as the Kernel module does.' data-toggle='tooltip' data-placement='top' href='https://v0-43--falcosecurity.netlify.app/docs/concepts/event-sources/kernel/#legacy-ebpf-probe' target='_blank' aria-label='eBPF probe'&gt;eBPF probe&lt;/a&gt; drivers.&lt;/p&gt;
&lt;p&gt;You can &lt;strong&gt;skip this section&lt;/strong&gt; if you plan to use the &lt;a class='glossary-tooltip' title='More robust eBPF probe which brings the CO-RE paradigm, better performances and maintainability.' data-toggle='tooltip' data-placement='top' href='https://v0-43--falcosecurity.netlify.app/docs/concepts/event-sources/kernel/#modern-ebpf-probe' target='_blank' aria-label='Modern eBPF'&gt;Modern eBPF&lt;/a&gt;.&lt;/p&gt;
&lt;div class="card card-sm pageinfo pageinfo-primary my-4"&gt;
&lt;div class="card-body"&gt;
&lt;div class="card-text"&gt;
&lt;p&gt;When using the eBPF probe or kernel module drivers, the driver loader attempts to either download a prebuilt driver or build it on the fly as a fallback. Starting with Falco 0.38, the driver loader has improved functionality to automatically retrieve the required kernel headers for distributions supported by &lt;a href="https://github.com/falcosecurity/driverkit"&gt;driverkit&lt;/a&gt;. This enhancement ensures that the necessary kernel headers are available to dynamically build the appropriate driver—whether it is the &lt;a class='glossary-tooltip' title='The Kernel module collects syscalls events from the Kernel, as the modern eBPF probe does.' data-toggle='tooltip' data-placement='top' href='https://v0-43--falcosecurity.netlify.app/docs/concepts/event-sources/kernel/#kernel-module' target='_blank' aria-label='Kernel Module'&gt;Kernel Module&lt;/a&gt; or the &lt;a class='glossary-tooltip' title='The eBPF probe (deprecated) collects syscall events from the Kernel, as the Kernel module does.' data-toggle='tooltip' data-placement='top' href='https://v0-43--falcosecurity.netlify.app/docs/concepts/event-sources/kernel/#legacy-ebpf-probe' target='_blank' aria-label='eBPF probe'&gt;eBPF probe&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;However, if the driver loader cannot automatically fetch the required kernel headers, you may need to install them manually on the host as a prerequisite. For detailed instructions on manual installation, refer to the &lt;a href="https://v0-43--falcosecurity.netlify.app/docs/getting-started/installation"&gt;Installation section&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="card card-sm pageinfo pageinfo-primary my-4"&gt;
&lt;div class="card-body"&gt;
&lt;div class="card-text"&gt;
&lt;p&gt;The &lt;code&gt;falcosecurity/falco-driver-loader:0.43.0&lt;/code&gt; is based on a recent Debian image. For ancient kernel versions, this might not work. The alternative &lt;code&gt;falcosecurity/falco-driver-loader:0.43.0-buster&lt;/code&gt; (based on an older Debian image) may work in such a case.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id="driver-installation-kernel-module"&gt;Kernel Module&lt;/h3&gt;
&lt;p&gt;To install the kernel module driver on the host system, you can use the following command:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;docker pull falcosecurity/falco-driver-loader:0.43.0
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;docker run --rm -it &lt;span style="color:#b62;font-weight:bold"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; --privileged &lt;span style="color:#b62;font-weight:bold"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; -v /root/.falco:/root/.falco &lt;span style="color:#b62;font-weight:bold"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; -v /boot:/host/boot:ro &lt;span style="color:#b62;font-weight:bold"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; -v /lib/modules:/host/lib/modules &lt;span style="color:#b62;font-weight:bold"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; -v /usr:/host/usr:ro &lt;span style="color:#b62;font-weight:bold"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; -v /proc:/host/proc:ro &lt;span style="color:#b62;font-weight:bold"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; -v /etc:/host/etc:ro &lt;span style="color:#b62;font-weight:bold"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; falcosecurity/falco-driver-loader:0.43.0 kmod
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="driver-installation-ebpf-probe"&gt;eBPF Probe&lt;/h3&gt;
&lt;p&gt;To install the eBPF probe driver on the host system, you can use the following command:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;docker pull falcosecurity/falco-driver-loader:0.43.0
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;docker run --rm -it &lt;span style="color:#b62;font-weight:bold"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; --privileged &lt;span style="color:#b62;font-weight:bold"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; -v /root/.falco:/root/.falco &lt;span style="color:#b62;font-weight:bold"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; -v /boot:/host/boot:ro &lt;span style="color:#b62;font-weight:bold"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; -v /lib/modules:/host/lib/modules:ro &lt;span style="color:#b62;font-weight:bold"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; -v /usr:/host/usr:ro &lt;span style="color:#b62;font-weight:bold"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; -v /proc:/host/proc:ro &lt;span style="color:#b62;font-weight:bold"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; -v /etc:/host/etc:ro &lt;span style="color:#b62;font-weight:bold"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; falcosecurity/falco-driver-loader:0.43.0 ebpf
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="verify-image-signing"&gt;Verify Image Signing&lt;/h2&gt;
&lt;p&gt;All official container images for Falco, starting from version 0.35.0, are signed with &lt;a href="https://github.com/sigstore/cosign"&gt;cosign&lt;/a&gt;. To verify the signature, you can run the following command:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;cosign verify docker.io/falcosecurity/falco:0.43.0 &lt;span style="color:#b62;font-weight:bold"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; --certificate-oidc-issuer&lt;span style="color:#666"&gt;=&lt;/span&gt;https://token.actions.githubusercontent.com &lt;span style="color:#b62;font-weight:bold"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; --certificate-identity-regexp&lt;span style="color:#666"&gt;=&lt;/span&gt;https://github.com/falcosecurity/falco/ &lt;span style="color:#b62;font-weight:bold"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; --certificate-github-workflow-ref&lt;span style="color:#666"&gt;=&lt;/span&gt;refs/tags/0.43.0
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Replace &lt;code&gt;docker.io/falcosecurity/falco&lt;/code&gt; with any official Falco image (&lt;code&gt;falco&lt;/code&gt;, &lt;code&gt;falco-driver-loader&lt;/code&gt;) from any official container registry to verify other images.&lt;/p&gt;
&lt;p&gt;If you have your own container registry and wish to retain the signature while copying Falco images, you can simply use the cosign copy command:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;cosign copy docker.io/falcosecurity/falco:0.43.0 your-registry/falco:0.43.0
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;And you'll be able to easily verify that the image in your registry was not tampered with!&lt;/p&gt;
&lt;h2 id="configuration"&gt;Configuration&lt;/h2&gt;
&lt;p&gt;You can configure Falco by either:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Passing the &lt;code&gt;-o&lt;/code&gt; command line flag to the Docker run command&lt;/li&gt;
&lt;li&gt;Or by mounting a custom configuration file into the container (e.g., &lt;code&gt;-v /path/to/falco.yaml:/etc/falco/falco.yaml&lt;/code&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Further configurable options via environment variables include (to be passed with &lt;code&gt;-e&lt;/code&gt; with Docker):&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;FALCOCTL_DRIVER_REPOS&lt;/code&gt; - See the &lt;a href="https://falco.org/docs/getting-started/installation/#install-driver"&gt;Installing the Driver&lt;/a&gt; section.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;SKIP_DRIVER_LOADER&lt;/code&gt; - Set this environment variable to avoid running &lt;code&gt;falcoctl driver&lt;/code&gt; tool when the &lt;code&gt;falcosecurity/falco&lt;/code&gt; image starts. Useful when the driver has already been installed on the host by other means.&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>Docs: How to distribute a plugin</title><link>https://v0-43--falcosecurity.netlify.app/docs/developer-guide/plugins/how-to-distribute/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://v0-43--falcosecurity.netlify.app/docs/developer-guide/plugins/how-to-distribute/</guid><description>
&lt;h2 id="introduction"&gt;Introduction&lt;/h2&gt;
&lt;p&gt;In this article, we'll focus on the steps to build the OCI artifacts containing the plugin and its rules and how to distribute them on Github Packages.&lt;/p&gt;
&lt;div class="card card-sm pageinfo pageinfo-info my-4"&gt;
&lt;div class="card-body"&gt;
&lt;div class="card-text"&gt;
&lt;p&gt;To get more familiar with the OCI artifacts, you can read our blog posts about &lt;a href="https://v0-43--falcosecurity.netlify.app/blog/falcoctl-install-manage-rules-plugins/"&gt;falcoctl&lt;/a&gt; and &lt;a href="https://v0-43--falcosecurity.netlify.app/blog/gitops-your-falco-rules/"&gt;GitOps for rules&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;In the next sections we'll describe how to:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;set up a Github Actions workflow to:
&lt;ul&gt;
&lt;li&gt;create a release with &lt;code&gt;GoReleaser&lt;/code&gt; when a tag is pushed&lt;/li&gt;
&lt;li&gt;build the OCI artifacts of the plugin and its rules&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;create the &lt;code&gt;index.yaml&lt;/code&gt; used by &lt;code&gt;falcoctl&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="requirements"&gt;Requirements&lt;/h2&gt;
&lt;p&gt;This tutorial is based on a Github repo, with the possibility to run workflows in Github Actions and store OCI artifacts in Github Packages. If you use a different system or even just private repositories, you'll need to adapt the examples to your context.&lt;/p&gt;
&lt;div class="card card-sm pageinfo pageinfo-warning my-4"&gt;
&lt;div class="card-body"&gt;
&lt;div class="card-text"&gt;
&lt;p&gt;To make it work, you must have the code organization proposed in &lt;a href="https://v0-43--falcosecurity.netlify.app/docs/concepts/plugins/developers-guide/how-to-develop"&gt;how to develop a plugin&lt;/a&gt; page.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id="goreleaser"&gt;GoReleaser&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;GoReleaser&lt;/code&gt; is a famous tool to build and create releases for projects on Github or else. We'll use it to build and archive the binaries at each release.&lt;/p&gt;
&lt;p&gt;At the root of your repo, create a &lt;code&gt;.goreleaser.yaml&lt;/code&gt; file with the following content:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;builds&lt;/span&gt;:&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;- &lt;span style="color:#008000;font-weight:bold"&gt;env&lt;/span&gt;:&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;- GODEBUG=cgocheck=0&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;main&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;./plugin&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;binary&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;lib{PLUGIN_NAME}.so&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;goos&lt;/span&gt;:&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;- linux&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;goarch&lt;/span&gt;:&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;- amd64&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;flags&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;-buildmode=c-shared&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;checksum&lt;/span&gt;:&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;name_template&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#b44"&gt;&amp;#34;checksums.txt&amp;#34;&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;With &lt;code&gt;PLUGIN_NAME&lt;/code&gt; as the name of your plugin.&lt;/p&gt;
&lt;h2 id="makefile"&gt;Makefile&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;Makefiles&lt;/code&gt; are a convenient way to script actions. We'll use it to pass all the required flags to create the final &lt;code&gt;.so&lt;/code&gt; library files used by the &lt;code&gt;Falco&lt;/code&gt; plugin framework:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-makefile" data-lang="makefile"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#b8860b"&gt;SHELL&lt;/span&gt;&lt;span style="color:#666"&gt;=&lt;/span&gt;/bin/bash -o pipefail
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#b8860b"&gt;GO&lt;/span&gt; &lt;span style="color:#666"&gt;?=&lt;/span&gt; go
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#b8860b"&gt;NAME&lt;/span&gt; &lt;span style="color:#666"&gt;:=&lt;/span&gt; &lt;span style="color:#666"&gt;{&lt;/span&gt;PLUGIN_NAME&lt;span style="color:#666"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#b8860b"&gt;OUTPUT&lt;/span&gt; &lt;span style="color:#666"&gt;:=&lt;/span&gt; lib&lt;span style="color:#a2f;font-weight:bold"&gt;$(&lt;/span&gt;NAME&lt;span style="color:#a2f;font-weight:bold"&gt;)&lt;/span&gt;.so
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style=""&gt;ifeq&lt;/span&gt; &lt;span style=""&gt;(&lt;/span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;$(&lt;/span&gt;&lt;span style="color:#b8860b"&gt;DEBUG&lt;/span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;)&lt;/span&gt;&lt;span style=""&gt;,&lt;/span&gt; &lt;span style=""&gt;1)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#b8860b"&gt;GODEBUGFLAGS&lt;/span&gt;&lt;span style="color:#666"&gt;=&lt;/span&gt; &lt;span style="color:#b8860b"&gt;GODEBUG&lt;/span&gt;&lt;span style="color:#666"&gt;=&lt;/span&gt;&lt;span style="color:#b8860b"&gt;cgocheck&lt;/span&gt;&lt;span style="color:#666"&gt;=&lt;/span&gt;&lt;span style="color:#666"&gt;2&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style=""&gt;else&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#b8860b"&gt;GODEBUGFLAGS&lt;/span&gt;&lt;span style="color:#666"&gt;=&lt;/span&gt; &lt;span style="color:#b8860b"&gt;GODEBUG&lt;/span&gt;&lt;span style="color:#666"&gt;=&lt;/span&gt;&lt;span style="color:#b8860b"&gt;cgocheck&lt;/span&gt;&lt;span style="color:#666"&gt;=&lt;/span&gt;&lt;span style="color:#666"&gt;0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style=""&gt;endif&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#00a000"&gt;all&lt;/span&gt;&lt;span style="color:#666"&gt;:&lt;/span&gt; build
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#00a000"&gt;clean&lt;/span&gt;&lt;span style="color:#666"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; @rm -f lib&lt;span style="color:#a2f;font-weight:bold"&gt;$(&lt;/span&gt;NAME&lt;span style="color:#a2f;font-weight:bold"&gt;)&lt;/span&gt;.so
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#00a000"&gt;build&lt;/span&gt;&lt;span style="color:#666"&gt;:&lt;/span&gt; clean
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; @&lt;span style="color:#a2f;font-weight:bold"&gt;$(&lt;/span&gt;GODEBUGFLAGS&lt;span style="color:#a2f;font-weight:bold"&gt;)&lt;/span&gt; &lt;span style="color:#a2f;font-weight:bold"&gt;$(&lt;/span&gt;GO&lt;span style="color:#a2f;font-weight:bold"&gt;)&lt;/span&gt; build -buildmode&lt;span style="color:#666"&gt;=&lt;/span&gt;c-shared -buildvcs&lt;span style="color:#666"&gt;=&lt;/span&gt;&lt;span style="color:#a2f"&gt;false&lt;/span&gt; -o &lt;span style="color:#a2f;font-weight:bold"&gt;$(&lt;/span&gt;OUTPUT&lt;span style="color:#a2f;font-weight:bold"&gt;)&lt;/span&gt; ./plugin
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;With &lt;code&gt;PLUGIN_NAME&lt;/code&gt; as the name of your plugin.&lt;/p&gt;
&lt;p&gt;You can test it by running &lt;code&gt;make build&lt;/code&gt; and see the &lt;code&gt;lib{PLUGIN_NAME}.so&lt;/code&gt; appearing at the root of your folder.&lt;/p&gt;
&lt;h2 id="github-actions-workflow"&gt;Github Actions Workflow&lt;/h2&gt;
&lt;p&gt;The first step is to create the &lt;code&gt;.github/workflows&lt;/code&gt; folder and the &lt;code&gt;release.yaml&lt;/code&gt; file describing our workflow.&lt;/p&gt;
&lt;h3 id="headers"&gt;Headers&lt;/h3&gt;
&lt;p&gt;Each workflow starts with, at least, a &lt;code&gt;name&lt;/code&gt; and a &lt;code&gt;on&lt;/code&gt;:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;name&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;Release Plugins&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;on&lt;/span&gt;:&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;push&lt;/span&gt;:&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;tags&lt;/span&gt;:&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;- &lt;span style="color:#b44"&gt;&amp;#39;[0-9]+\.[0-9]+\.[0-9]+&amp;#39;&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;env&lt;/span&gt;:&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;OCI_REGISTRY&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;ghcr.io&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;PLUGIN_NAME&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;{PLUGIN_NAME}&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;permissions&lt;/span&gt;:&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;contents&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;write&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;packages&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;write&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The workflow will be triggered each time a tag following semantic versioning (&lt;code&gt;major.minor.patch&lt;/code&gt;) is created.&lt;/p&gt;
&lt;p&gt;Once again &lt;code&gt;PLUGIN_NAME&lt;/code&gt; is the name of your plugin, it will be set as env var to be reused all over the file. It's the only thing to adapt to your context. We also set the registry (Github Packages) URL with &lt;code&gt;OCI_REGISTRY&lt;/code&gt;.&lt;/p&gt;
&lt;div class="card card-sm pageinfo pageinfo-warning my-4"&gt;
&lt;div class="card-body"&gt;
&lt;div class="card-text"&gt;
&lt;p&gt;The permissions are required to allow Github Actions to read the content of your repo, create the release and push the artifacts into Github Packages.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id="the-jobs"&gt;The jobs&lt;/h3&gt;
&lt;p&gt;Once we have set the &amp;quot;headers&amp;quot; of the workflow file, it's time to set the actions that will be run. We'll split them into 2:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Publish the OCI artifacts&lt;/li&gt;
&lt;li&gt;Create the release&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id="publish-the-oci-artifacts"&gt;Publish the OCI artifacts&lt;/h4&gt;
&lt;p&gt;To publish the artifacts, we'll use &lt;a href="https://github.com/falcosecurity/falcoctl"&gt;&lt;code&gt;falcoctl&lt;/code&gt;&lt;/a&gt;, the official CLI to manage Falco artifacts.&lt;/p&gt;
&lt;p&gt;The steps to publishing the artifacts will be, in this order:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Get the falcoctl sources&lt;/li&gt;
&lt;li&gt;Prepare the Go env&lt;/li&gt;
&lt;li&gt;Build falcoctl (guarantees the latest version)&lt;/li&gt;
&lt;li&gt;Get the plugin sources&lt;/li&gt;
&lt;li&gt;Build the plugin (&lt;code&gt;.so&lt;/code&gt; file)&lt;/li&gt;
&lt;li&gt;Get the repo name in lower case&lt;/li&gt;
&lt;li&gt;Push the artifacts with all their tags:
&lt;ul&gt;
&lt;li&gt;push the plugin&lt;/li&gt;
&lt;li&gt;push the rules with a dependency to the plugin&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;jobs&lt;/span&gt;:&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;publish-oci-artifacts&lt;/span&gt;:&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;runs-on&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;ubuntu-latest&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;steps&lt;/span&gt;:&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;- &lt;span style="color:#008000;font-weight:bold"&gt;name&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;Checkout Falcoctl Repo&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;uses&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;actions/checkout@v3&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;with&lt;/span&gt;:&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;repository&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;falcosecurity/falcoctl&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;ref&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;main&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;path&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;tools/falcoctl&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;- &lt;span style="color:#008000;font-weight:bold"&gt;name&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;Setup Golang&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;uses&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;actions/setup-go@v4&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;with&lt;/span&gt;:&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;go-version&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#b44"&gt;&amp;#39;^1.20&amp;#39;&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;cache-dependency-path&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;tools/falcoctl/go.sum&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;- &lt;span style="color:#008000;font-weight:bold"&gt;name&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;Build falcoctl&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;run&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;make&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;working-directory&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;tools/falcoctl&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;- &lt;span style="color:#008000;font-weight:bold"&gt;name&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;Checkout&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;uses&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;actions/checkout@v3&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;with&lt;/span&gt;:&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;path&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;plugin&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;- &lt;span style="color:#008000;font-weight:bold"&gt;name&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;Build the plugin&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;run&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;make build&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;working-directory&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;plugin&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;- &lt;span style="color:#008000;font-weight:bold"&gt;id&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;StringRepoName&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;uses&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;ASzc/change-string-case-action@v5&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;with&lt;/span&gt;:&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;string&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;${{ github.repository }}&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;- &lt;span style="color:#008000;font-weight:bold"&gt;name&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;Upload OCI artifacts to GitHub packages&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;run&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;|&lt;span style="color:#b44;font-style:italic"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#b44;font-style:italic"&gt; MAJOR=$(echo ${{ github.ref_name }} | cut -f1 -d&amp;#34;.&amp;#34;)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#b44;font-style:italic"&gt; MINOR=$(echo ${{ github.ref_name }} | cut -f1,2 -d&amp;#34;.&amp;#34;)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#b44;font-style:italic"&gt; DIR=$(pwd)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#b44;font-style:italic"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#b44;font-style:italic"&gt; cd plugin/
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#b44;font-style:italic"&gt; $DIR/tools/falcoctl/falcoctl registry push \
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#b44;font-style:italic"&gt; ${{ env.OCI_REGISTRY }}/${{ steps.StringRepoName.outputs.lowercase }}/plugin/${{ env.PLUGIN_NAME }}:${{ github.ref_name }} \
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#b44;font-style:italic"&gt; --config /dev/null \
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#b44;font-style:italic"&gt; --type plugin \
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#b44;font-style:italic"&gt; --version &amp;#34;${{ github.ref_name }}&amp;#34; \
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#b44;font-style:italic"&gt; --tag latest --tag $MAJOR --tag $MINOR \
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#b44;font-style:italic"&gt; --platform linux/amd64 \
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#b44;font-style:italic"&gt; --requires plugin_api_version:2.0.0 \
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#b44;font-style:italic"&gt; --depends-on ${{ env.PLUGIN_NAME }}-rules:${{ github.ref_name }} \
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#b44;font-style:italic"&gt; --name ${{ env.PLUGIN_NAME }} \
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#b44;font-style:italic"&gt; lib${{ env.PLUGIN_NAME }}.so
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#b44;font-style:italic"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#b44;font-style:italic"&gt; cd rules/
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#b44;font-style:italic"&gt; $DIR/tools/falcoctl/falcoctl registry push \
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#b44;font-style:italic"&gt; ${{ env.OCI_REGISTRY }}/${{ steps.StringRepoName.outputs.lowercase }}/ruleset/${{ env.PLUGIN_NAME }}:${{ github.ref_name }} \
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#b44;font-style:italic"&gt; --config /dev/null \
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#b44;font-style:italic"&gt; --type rulesfile \
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#b44;font-style:italic"&gt; --version &amp;#34;${{ github.ref_name }}&amp;#34; \
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#b44;font-style:italic"&gt; --tag latest --tag $MAJOR --tag $MINOR \
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#b44;font-style:italic"&gt; --depends-on ${{ env.PLUGIN_NAME }}:${{ github.ref_name }} \
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#b44;font-style:italic"&gt; --name ${{ env.PLUGIN_NAME }}-rules \
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#b44;font-style:italic"&gt; ${{ env.PLUGIN_NAME }}_rules.yaml&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;env&lt;/span&gt;:&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;FALCOCTL_REGISTRY_AUTH_BASIC&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;${{ env.OCI_REGISTRY }},${{ github.repository_owner }},${{ secrets.GITHUB_TOKEN }}&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h4 id="create-the-release"&gt;Create the release&lt;/h4&gt;
&lt;p&gt;&lt;code&gt;GoReleaser&lt;/code&gt; can automatically generate a Changelog at the same time we publish the new artifacts. This step isn't imperative to generate the OCI artifacts but it's a good practice among Go developers. To achieve that, make sure to have a correct &lt;code&gt;.goreleaser.yml&lt;/code&gt; file as explained &lt;a href="https://v0-43--falcosecurity.netlify.app/blog/extend-falco-inputs-with-a-plugin-distribute/#goreleaser"&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;release&lt;/span&gt;:&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;runs-on&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;ubuntu-latest&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;steps&lt;/span&gt;:&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;- &lt;span style="color:#008000;font-weight:bold"&gt;name&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;Checkout&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;uses&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;actions/checkout@v3&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;with&lt;/span&gt;:&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;fetch-depth&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#666"&gt;0&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;- &lt;span style="color:#008000;font-weight:bold"&gt;name&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;Setup Golang&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;uses&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;actions/setup-go@v3&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;with&lt;/span&gt;:&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;go-version&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#b44"&gt;&amp;#39;1.19&amp;#39;&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;- &lt;span style="color:#008000;font-weight:bold"&gt;name&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;Run GoReleaser&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;uses&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;goreleaser/goreleaser-action@v4&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;with&lt;/span&gt;:&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;version&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;latest&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;args&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;release --clean --timeout 120m&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;env&lt;/span&gt;:&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;GITHUB_TOKEN&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;${{ secrets.GITHUB_TOKEN }}&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;LDFLAGS&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#b44"&gt;&amp;#34;-buildmode=c-shared&amp;#34;&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;GOPATH&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;/home/runner/go&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="final-result"&gt;Final result&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;name&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;Release Plugins&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;on&lt;/span&gt;:&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;push&lt;/span&gt;:&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;tags&lt;/span&gt;:&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;- &lt;span style="color:#b44"&gt;&amp;#39;[0-9]+\.[0-9]+\.[0-9]+&amp;#39;&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;env&lt;/span&gt;:&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;OCI_REGISTRY&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;ghcr.io&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;PLUGIN_NAME&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;{PLUGIN_NAME}&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;permissions&lt;/span&gt;:&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;contents&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;write&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;packages&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;write&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;jobs&lt;/span&gt;:&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;publish-oci-artifacts&lt;/span&gt;:&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;runs-on&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;ubuntu-latest&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;steps&lt;/span&gt;:&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;- &lt;span style="color:#008000;font-weight:bold"&gt;name&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;Checkout Falcoctl Repo&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;uses&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;actions/checkout@v3&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;with&lt;/span&gt;:&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;repository&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;falcosecurity/falcoctl&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;ref&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#666"&gt;0.5.0&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#080;font-style:italic"&gt;# adapt to the latest version&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;path&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;tools/falcoctl&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;- &lt;span style="color:#008000;font-weight:bold"&gt;name&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;Setup Golang&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;uses&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;actions/setup-go@v4&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;with&lt;/span&gt;:&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;go-version&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#b44"&gt;&amp;#39;^1.20&amp;#39;&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;cache-dependency-path&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;tools/falcoctl/go.sum&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;- &lt;span style="color:#008000;font-weight:bold"&gt;name&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;Build falcoctl&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;run&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;make&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;working-directory&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;tools/falcoctl&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;- &lt;span style="color:#008000;font-weight:bold"&gt;name&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;Checkout&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;uses&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;actions/checkout@v3&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;with&lt;/span&gt;:&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;path&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;plugin&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;- &lt;span style="color:#008000;font-weight:bold"&gt;name&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;Build the plugin&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;run&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;make build&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;working-directory&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;plugin&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;- &lt;span style="color:#008000;font-weight:bold"&gt;id&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;StringRepoName&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;uses&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;ASzc/change-string-case-action@v5&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;with&lt;/span&gt;:&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;string&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;${{ github.repository }}&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;- &lt;span style="color:#008000;font-weight:bold"&gt;name&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;Upload OCI artifacts to GitHub packages&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;run&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;|&lt;span style="color:#b44;font-style:italic"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#b44;font-style:italic"&gt; MAJOR=$(echo ${{ github.ref_name }} | cut -f1 -d&amp;#34;.&amp;#34;)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#b44;font-style:italic"&gt; MINOR=$(echo ${{ github.ref_name }} | cut -f1,2 -d&amp;#34;.&amp;#34;)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#b44;font-style:italic"&gt; DIR=$(pwd)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#b44;font-style:italic"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#b44;font-style:italic"&gt; cd plugin/
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#b44;font-style:italic"&gt; $DIR/tools/falcoctl/falcoctl registry push \
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#b44;font-style:italic"&gt; ${{ env.OCI_REGISTRY }}/${{ steps.StringRepoName.outputs.lowercase }}/plugin/${{ env.PLUGIN_NAME }}:${{ github.ref_name }} \
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#b44;font-style:italic"&gt; --config /dev/null \
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#b44;font-style:italic"&gt; --type plugin \
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#b44;font-style:italic"&gt; --version &amp;#34;${{ github.ref_name }}&amp;#34; \
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#b44;font-style:italic"&gt; --tag latest --tag $MAJOR --tag $MINOR \
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#b44;font-style:italic"&gt; --platform linux/amd64 \
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#b44;font-style:italic"&gt; --requires plugin_api_version:2.0.0 \
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#b44;font-style:italic"&gt; --depends-on ${{ env.PLUGIN_NAME }}-rules:${{ github.ref_name }} \
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#b44;font-style:italic"&gt; --name ${{ env.PLUGIN_NAME }} \
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#b44;font-style:italic"&gt; lib${{ env.PLUGIN_NAME }}.so
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#b44;font-style:italic"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#b44;font-style:italic"&gt; cd rules/
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#b44;font-style:italic"&gt; $DIR/tools/falcoctl/falcoctl registry push \
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#b44;font-style:italic"&gt; ${{ env.OCI_REGISTRY }}/${{ steps.StringRepoName.outputs.lowercase }}/ruleset/${{ env.PLUGIN_NAME }}:${{ github.ref_name }} \
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#b44;font-style:italic"&gt; --config /dev/null \
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#b44;font-style:italic"&gt; --type rulesfile \
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#b44;font-style:italic"&gt; --version &amp;#34;${{ github.ref_name }}&amp;#34; \
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#b44;font-style:italic"&gt; --tag latest --tag $MAJOR --tag $MINOR \
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#b44;font-style:italic"&gt; --depends-on ${{ env.PLUGIN_NAME }}:${{ github.ref_name }} \
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#b44;font-style:italic"&gt; --name ${{ env.PLUGIN_NAME }}-rules \
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#b44;font-style:italic"&gt; ${{ env.PLUGIN_NAME }}_rules.yaml&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;env&lt;/span&gt;:&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;FALCOCTL_REGISTRY_AUTH_BASIC&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;${{ env.OCI_REGISTRY }},${{ github.repository_owner }},${{ secrets.GITHUB_TOKEN }}&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;release&lt;/span&gt;:&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;runs-on&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;ubuntu-latest&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;steps&lt;/span&gt;:&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;- &lt;span style="color:#008000;font-weight:bold"&gt;name&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;Checkout&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;uses&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;actions/checkout@v3&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;with&lt;/span&gt;:&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;fetch-depth&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#666"&gt;0&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;- &lt;span style="color:#008000;font-weight:bold"&gt;name&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;Setup Golang&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;uses&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;actions/setup-go@v3&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;with&lt;/span&gt;:&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;go-version&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#b44"&gt;&amp;#39;1.19&amp;#39;&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;- &lt;span style="color:#008000;font-weight:bold"&gt;name&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;Run GoReleaser&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;uses&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;goreleaser/goreleaser-action@v4&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;with&lt;/span&gt;:&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;version&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;latest&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;args&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;release --clean --timeout 120m&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;env&lt;/span&gt;:&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;GITHUB_TOKEN&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;${{ secrets.GITHUB_TOKEN }}&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;LDFLAGS&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#b44"&gt;&amp;#34;-buildmode=c-shared&amp;#34;&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;GOPATH&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;/home/runner/go&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Replace &lt;code&gt;PLUGIN_NAME&lt;/code&gt; with the name of your plugin.&lt;/p&gt;
&lt;h2 id="the-index-yaml-file-for-falcoctl"&gt;The index.yaml file for falcoctl&lt;/h2&gt;
&lt;p&gt;This file is used by &lt;code&gt;falcoctl&lt;/code&gt; to know where to download your plugin and rules. Please read this &lt;a href="https://v0-43--falcosecurity.netlify.app/blog/falcoctl-install-manage-rules-plugins/#index"&gt;blog post&lt;/a&gt; to understand better how it works.&lt;/p&gt;
&lt;p&gt;We'll create our own file to allow like the following:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;- &lt;span style="color:#008000;font-weight:bold"&gt;name&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;{PLUGIN_NAME}&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;type&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;plugin&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;registry&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;ghcr.io&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;repository&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;{OWNER_NAME}/{REPO_NAME}/plugin/{PLUGIN_NAME}&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;description&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;{DESCRIPTION}&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;home&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;https://github.com/{OWNER_NAME}/{PLUGIN_NAME}&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;keywords&lt;/span&gt;:&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;- {PLUGIN_NAME}&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;license&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;Apache-2.0&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;maintainers&lt;/span&gt;:&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;- &lt;span style="color:#008000;font-weight:bold"&gt;email&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;{OWNER_EMAIL}&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;name&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;{OWNER_REAL_NAME}&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;sources&lt;/span&gt;:&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;- https://github.com/{OWNER_NAME}/{PLUGIN_NAME}&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;- &lt;span style="color:#008000;font-weight:bold"&gt;name&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;{PLUGIN_NAME}-rules&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;type&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;rulesfile&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;registry&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;ghcr.io&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;repository&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;{OWNER_NAME}/{REPO_NAME}/ruleset/docker&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;description&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;Rules for the {PLUGIN_NAME} plugin&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;home&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;https://github.com/{OWNER_NAME}/{REPO_NAME}/tree/main/rules&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;keywords&lt;/span&gt;:&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;- {PLUGIN_NAME}&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;license&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;Apache-2.0&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;maintainers&lt;/span&gt;:&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;- &lt;span style="color:#008000;font-weight:bold"&gt;email&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;{OWNER_EMAIL}&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;name&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;{OWNER_REAL_NAME}&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;sources&lt;/span&gt;:&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;- https://github.com/{OWNER_NAME}/{REPO_NAME}/tree/main/rules/{PLUGIN_NAME}_rules.yaml&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;With:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;PLUGIN_NAME&lt;/code&gt;: the name of you plugin&lt;/li&gt;
&lt;li&gt;&lt;code&gt;OWNER_NAME&lt;/code&gt;: your nickname on Github&lt;/li&gt;
&lt;li&gt;&lt;code&gt;REPO_NAME&lt;/code&gt;: the name of your repo for your plugin on Github&lt;/li&gt;
&lt;li&gt;&lt;code&gt;OWNER_EMAIL&lt;/code&gt;: an email for contact&lt;/li&gt;
&lt;li&gt;&lt;code&gt;OWNER_REAL_NAME&lt;/code&gt;: your real name or not&lt;/li&gt;
&lt;li&gt;&lt;code&gt;DESCRIPTION&lt;/code&gt;: description of your plugin&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;code&gt;falcoctl&lt;/code&gt; uses the keywords field to perform a search among your plugins. Leverage this functionality by adding relevant terms to your plugin.&lt;/p&gt;
&lt;p&gt;The repository structure should look like the following:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;├── .github
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;│ └── workflows
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;│ └── release.yaml
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;├── .gitignore
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;├── go.mod
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;├── .goreleaser.yml
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;├── go.sum
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;├── index.yaml
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;├── LICENSE
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;├── Makefile
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;├── README.md
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;├── pkg
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;│ └── &lt;span style="color:#666"&gt;{&lt;/span&gt;PLUGIN_NAME&lt;span style="color:#666"&gt;}&lt;/span&gt;.go
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;├── plugin
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;│ └── main.go
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;└── rules
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; └── &lt;span style="color:#666"&gt;{&lt;/span&gt;PLUGIN_NAME&lt;span style="color:#666"&gt;}&lt;/span&gt;_rules.yaml
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;There are 2 ways to expose the &lt;code&gt;index.yaml&lt;/code&gt; file:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;exposing the raw file: &lt;code&gt;https://raw.githubusercontent.com/{OWNER_NAME}/{REPO_NAME}/main/index.yaml&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;exposing the file through Github Page: &lt;code&gt;https://{OWNER_NAME}.github.io/{REPO_NAME}/index.yaml&lt;/code&gt; (make sure to &lt;a href="https://docs.github.com/en/pages/getting-started-with-github-pages/configuring-a-publishing-source-for-your-github-pages-site#publishing-from-a-branch"&gt;enable the Pages&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="create-our-first-version"&gt;Create our first version&lt;/h2&gt;
&lt;p&gt;Everything is now ready to publish a first version of our plugin.&lt;/p&gt;
&lt;p&gt;In the &lt;code&gt;main&lt;/code&gt; branch, run:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;git tag 0.1.0 -m &lt;span style="color:#b44"&gt;&amp;#34;0.1.0&amp;#34;&lt;/span&gt; &lt;span style="color:#666"&gt;&amp;amp;&amp;amp;&lt;/span&gt; git push origin 0.1.0
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Few seconds after, your workflow should be started and you will have your first published version with associated artifacts.&lt;/p&gt;
&lt;h2 id="installation-of-your-plugin-and-rules"&gt;Installation of your plugin and rules&lt;/h2&gt;
&lt;p&gt;The process is now the same as the one described &lt;a href="https://v0-43--falcosecurity.netlify.app/blog/falcoctl-install-manage-rules-plugins/"&gt;here&lt;/a&gt;, except we'll use your specific &lt;code&gt;index.yaml&lt;/code&gt; to register a new index:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo falcoctl index add &lt;span style="color:#666"&gt;{&lt;/span&gt;PLUGIN_NAME&lt;span style="color:#666"&gt;}&lt;/span&gt; https://&lt;span style="color:#666"&gt;{&lt;/span&gt;OWNER_NAME&lt;span style="color:#666"&gt;}&lt;/span&gt;.github.io/&lt;span style="color:#666"&gt;{&lt;/span&gt;REPO_NAME&lt;span style="color:#666"&gt;}&lt;/span&gt;/index.yaml
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo falcoctl artifact install &lt;span style="color:#666"&gt;{&lt;/span&gt;PLUGIN_NAME&lt;span style="color:#666"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo falcoctl artifact install &lt;span style="color:#666"&gt;{&lt;/span&gt;PLUGIN_NAME&lt;span style="color:#666"&gt;}&lt;/span&gt;-rules
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;For the &lt;code&gt;docker&lt;/code&gt; plugin, for example:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;❯ sudo falcoctl index add docker http://issif.github.io/docker-plugin/index.yaml
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;❯ sudo falcoctl artifact search docker
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;INDEX ARTIFACT TYPE REGISTRY REPOSITORY
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;docker docker plugin ghcr.io issif/docker-plugin/plugin/docker
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;docker docker-rules rulesfile ghcr.io issif/docker-plugin/ruleset/docker
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;❯ sudo falcoctl artifact install docker-rules
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; INFO Reading all configured index files from &lt;span style="color:#b44"&gt;&amp;#34;/root/.config/falcoctl/indexes.yaml&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; INFO Resolving dependencies ...
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; INFO Installing the following artifacts: &lt;span style="color:#666"&gt;[&lt;/span&gt;docker:0.3.3 ghcr.io/issif/docker-plugin/ruleset/docker:latest&lt;span style="color:#666"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; INFO Preparing to pull &lt;span style="color:#b44"&gt;&amp;#34;ghcr.io/issif/docker-plugin/plugin/docker:0.3.3&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; INFO Pulling 9145239be00e: &lt;span style="color:#080;font-style:italic"&gt;############################################# 100%&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; INFO Pulling 2073e106ba07: &lt;span style="color:#080;font-style:italic"&gt;############################################# 100%&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; INFO Pulling 01ecf22a3821: &lt;span style="color:#080;font-style:italic"&gt;############################################# 100%&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; INFO Artifact successfully installed in &lt;span style="color:#b44"&gt;&amp;#34;/usr/share/falco/plugins&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; INFO Preparing to pull &lt;span style="color:#b44"&gt;&amp;#34;ghcr.io/issif/docker-plugin/ruleset/docker:latest&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; INFO Pulling 3482c7ca931f: &lt;span style="color:#080;font-style:italic"&gt;############################################# 100%&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; INFO Pulling 433ad24cb056: &lt;span style="color:#080;font-style:italic"&gt;############################################# 100%&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; INFO Pulling e449b880035d: &lt;span style="color:#080;font-style:italic"&gt;############################################# 100%&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; INFO Artifact successfully installed in &lt;span style="color:#b44"&gt;&amp;#34;/etc/falco&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description></item><item><title>Docs: Falco Daemon Arguments</title><link>https://v0-43--falcosecurity.netlify.app/docs/reference/daemon/cli-arguments/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://v0-43--falcosecurity.netlify.app/docs/reference/daemon/cli-arguments/</guid><description>
&lt;p&gt;This page lists all arguments you can pass to Falco in your command line:&lt;/p&gt;
&lt;h2&gt;Falco Arguments&lt;/h2&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;Falco - Cloud Native Runtime Security
Usage:
falco [OPTION...]
-h, --help Print this help list and exit.
-c &amp;lt;path&amp;gt; Configuration file. If not specified tries /etc/falco/falco.yaml.
--config-schema Print the config json schema and exit.
--rule-schema Print the rule json schema and exit.
--disable-source &amp;lt;event_source&amp;gt;
Turn off a specific &amp;lt;event_source&amp;gt;. By default, all loaded sources get enabled. Available sources are
&amp;#39;syscall&amp;#39; plus all sources defined by loaded plugins supporting the event sourcing capability. This option
can be passed multiple times, but turning off all event sources simultaneously is not permitted. This
option can not be mixed with --enable-source. This option has no effect when reproducing events from a
capture file.
--dry-run Run Falco without processing events. It can help check that the configuration and rules do not have any
errors.
--enable-source &amp;lt;event_source&amp;gt;
Enable a specific &amp;lt;event_source&amp;gt;. By default, all loaded sources get enabled. Available sources are
&amp;#39;syscall&amp;#39; plus all sources defined by loaded plugins supporting the event sourcing capability. This option
can be passed multiple times. When using this option, only the event sources specified by it will be
enabled. This option can not be mixed with --disable-source. This option has no effect when reproducing
events from a capture file.
--gvisor-generate-config [=&amp;lt;socket_path&amp;gt;(=/run/falco/gvisor.sock)]
DEPRECATED: Generate a configuration file that can be used for gVisor and exit. See --gvisor-config for
more details.
-i Print those events that are ignored by default for performance reasons and exit.
-L Show the name and description of all rules and exit. If json_output is set to true, it prints details about
all rules, macros, and lists in JSON format.
-l &amp;lt;rule&amp;gt; Show the name and description of the rule specified &amp;lt;rule&amp;gt; and exit. If json_output is set to true, it
prints details about the rule in JSON format.
--list [=&amp;lt;source&amp;gt;(=)] List all defined fields and exit. If &amp;lt;source&amp;gt; is provided, only list those fields for the source &amp;lt;source&amp;gt;.
Current values for &amp;lt;source&amp;gt; are &amp;#34;syscall&amp;#34; or any source from a configured plugin with event sourcing
capability.
--list-events List all defined syscall events, metaevents, tracepoint events and exit.
--list-plugins Print info on all loaded plugins and exit.
-M &amp;lt;num_seconds&amp;gt; Stop Falco execution after &amp;lt;num_seconds&amp;gt; are passed. (default: 0)
--markdown Print output in Markdown format when used in conjunction with --list or --list-events options. It has no
effect when used with other options.
-N Only print field names when used in conjunction with the --list option. It has no effect when used with
other options.
-o, --option &amp;lt;opt&amp;gt;=&amp;lt;val&amp;gt; Set the value of option &amp;lt;opt&amp;gt; to &amp;lt;val&amp;gt;. Overrides values in the configuration file. &amp;lt;opt&amp;gt; can be identified
using its location in the configuration file using dot notation. Elements of list entries can be accessed
via square brackets [].
E.g. base.id = val
base.subvalue.subvalue2 = val
base.list[1]=val
--plugin-info &amp;lt;plugin_name&amp;gt;
Print info for the plugin specified by &amp;lt;plugin_name&amp;gt; and exit.
This includes all descriptive information like name and author, along with the
schema format for the init configuration and a list of suggested open parameters.
&amp;lt;plugin_name&amp;gt; can be the plugin&amp;#39;s name or its configured &amp;#39;library_path&amp;#39;.
-p, --print &amp;lt;output_format&amp;gt; DEPRECATED: use -o append_output... instead. Print additional information in the rule&amp;#39;s output.
Use -pc or -pcontainer to append container details to syscall events.
Use -pk or -pkubernetes to add both container and Kubernetes details to syscall events.
The details will be directly appended to the rule&amp;#39;s output.
Alternatively, use -p &amp;lt;output_format&amp;gt; for a custom format. In this case, the given &amp;lt;output_format&amp;gt; will be
appended to the rule&amp;#39;s output without any replacement to all events, including plugin events.
-P, --pidfile &amp;lt;pid_file&amp;gt; Write PID to specified &amp;lt;pid_file&amp;gt; path. By default, no PID file is created. (default: &amp;#34;&amp;#34;)
-r &amp;lt;rules_file&amp;gt; Rules file or directory to be loaded. This option can be passed multiple times. Falco defaults to the
values in the configuration file when this option is not specified. Only files with .yml or .yaml extension
are considered.
--support Print support information, including version, rules files used, loaded configuration, etc., and exit. The
output is in JSON format.
-U, --unbuffered Turn off output buffering for configured outputs. This causes every single line emitted by Falco to be
flushed, which generates higher CPU usage but is useful when piping those outputs into another process or a
script.
-V, --validate &amp;lt;rules_file&amp;gt; Read the contents of the specified &amp;lt;rules_file&amp;gt; file(s), validate the loaded rules, and exit. This option
can be passed multiple times to validate multiple files.
-v Enable verbose output.
--version Print version information and exit.
--page-size Print the system page size and exit. This utility may help choose the right syscall ring buffer size.
&lt;/code&gt;&lt;/pre&gt;</description></item><item><title>Docs: Falco Is Dropping Syscalls Events</title><link>https://v0-43--falcosecurity.netlify.app/docs/troubleshooting/dropping/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://v0-43--falcosecurity.netlify.app/docs/troubleshooting/dropping/</guid><description>
&lt;h2 id="action-items-tl-dr"&gt;Action Items (TL;DR)&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Adjust the &lt;a href="https://github.com/falcosecurity/falco/blob/master/falco.yaml"&gt;buf_size_preset&lt;/a&gt; in the falco.yaml config.&lt;/li&gt;
&lt;li&gt;Utilize &lt;a href="https://github.com/falcosecurity/falco/blob/master/falco.yaml"&gt;base_syscalls&lt;/a&gt; to limit the syscalls under monitoring.&lt;/li&gt;
&lt;li&gt;Audit and optimize Falco rules to prevent unnecessary backpressure on the kernel, considering that Falco's main event stream is single-threaded.&lt;/li&gt;
&lt;li&gt;Try running Falco without any plugins.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="background"&gt;Background&lt;/h2&gt;
&lt;p&gt;Falco monitors each syscall based on deployed Falco rules. Additionally, Falco requires a few more syscalls to function properly, see &lt;a href="https://falco.org/blog/adaptive-syscalls-selection/"&gt;Adaptive Syscalls Selection&lt;/a&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The default configuration is conservative; consequently, there is an opportunity that you could optimize and even eliminate Falco dropping events, depending on the scope of monitoring you are seeking.&lt;/li&gt;
&lt;li&gt;Utilize the &lt;a href="https://github.com/falcosecurity/falco/blob/master/falco.yaml"&gt;base_syscalls&lt;/a&gt; config for precise override control alongside a resource-friendly suggestion of the absolute minimum additional syscalls needed to ensure proper functioning of Falco (set &lt;code&gt;repair: true&lt;/code&gt;).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Falco monitors syscalls by hooking into kernel tracepoints. To transfer events from the kernel to userspace, it uses buffers. For each CPU, Falco allocates separate buffers. If you're using the &lt;code&gt;modern_ebpf&lt;/code&gt; driver, you can choose to have fewer, larger buffers shared among multiple CPUs (contention, according to kernel experts, should not be a problem). The buffer size is fixed but can be adjusted in the &lt;code&gt;buf_size_preset&lt;/code&gt; config. Increasing the size helps, but keep in mind that the benefits may not increase proportionally. Also, remember that a larger buffer means more preallocated memory.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/falcosecurity/falco/blob/master/falco.yaml"&gt;buf_size_preset&lt;/a&gt; of &lt;code&gt;5&lt;/code&gt; or &lt;code&gt;6&lt;/code&gt; could be a valid option for large machines assuming you use the kmod or ebpf drivers.&lt;/li&gt;
&lt;li&gt;For the &lt;code&gt;modern_ebpf&lt;/code&gt; driver try a &lt;code&gt;modern_ebpf.buf_size_preset&lt;/code&gt; of &lt;code&gt;6&lt;/code&gt; or &lt;code&gt;7&lt;/code&gt;, along with a &lt;code&gt;modern_ebpf.cpus_for_each_buffer&lt;/code&gt; of &lt;code&gt;4&lt;/code&gt; or &lt;code&gt;6&lt;/code&gt;. Feel free to experiment and adjust these values as needed.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Lastly, while it may sound appealing to push all filtering into the kernel, it is not that straightforward. In the kernel, you are in the application context, and yes, you can slow down both the kernel and the application (for example, apps may then experience lower request rates). Checkout the &lt;a href="https://github.com/falcosecurity/libs/blob/master/proposals/20230530-driver-kernel-testing-framework.md"&gt;Driver Kernel Testing Framework&lt;/a&gt; for more information. Additionally, in the kernel, you only have raw syscall arguments and can't easily correlate them with other events. All this being said, we are actively looking into ways to improve this and make the kernel logic smarter without sacrificing performance.&lt;/p&gt;
&lt;h2 id="kernel-side-syscalls-drops-metrics"&gt;Kernel-side Syscalls Drops Metrics&lt;/h2&gt;
&lt;p&gt;Falco's &lt;a href="https://github.com/falcosecurity/falco/blob/master/falco.yaml"&gt;metrics&lt;/a&gt; config (see also &lt;a href="https://v0-43--falcosecurity.netlify.app/docs/metrics/falco-metrics/"&gt;Falco Metrics&lt;/a&gt;) enables you to measure Falco's kernel-side syscall drops and provides a range of useful metrics related to software functioning. Key settings include:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;kernel_event_counters_enabled: true&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;libbpf_stats_enabled: true&lt;/code&gt; (for &lt;code&gt;ebpf&lt;/code&gt; or &lt;code&gt;modern_ebpf&lt;/code&gt; drivers, enable &lt;code&gt;/proc/sys/kernel/bpf_stats_enabled&lt;/code&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Here is an example metrics log snippet highlighting the fields crucial for this analysis. Pay close attention to &lt;code&gt;falco.evts_rate_sec&lt;/code&gt; and &lt;code&gt;scap.evts_rate_sec&lt;/code&gt;, as well as the monotonic drop counters categorizing syscalls into coarse-grained (non-comprehensive) categories. For more details, refer to the dedicated metrics section in the &lt;a href="https://v0-43--falcosecurity.netlify.app/docs/metrics/performance/"&gt;Falco Performance&lt;/a&gt; guide for a more detailed explanation.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;{&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;&amp;#34;output_fields&amp;#34;: &lt;/span&gt;{&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;&amp;#34;evt.source&amp;#34;: &lt;/span&gt;&lt;span style="color:#b44"&gt;&amp;#34;syscall&amp;#34;&lt;/span&gt;,&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;&amp;#34;falco.host_num_cpus&amp;#34;: &lt;/span&gt;&lt;span style="color:#666"&gt;96&lt;/span&gt;,&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#080;font-style:italic"&gt;# Divide *rate_sec by CPUs&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;&amp;#34;falco.evts_rate_sec&amp;#34;: &lt;/span&gt;&lt;span style="color:#666"&gt;93345.1&lt;/span&gt;,&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#080;font-style:italic"&gt;# Taken between 2 metrics snapshots&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;&amp;#34;falco.num_evts&amp;#34;: &lt;/span&gt;&lt;span style="color:#666"&gt;44381403800&lt;/span&gt;,&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;&amp;#34;falco.num_evts_prev&amp;#34;: &lt;/span&gt;&lt;span style="color:#666"&gt;44045361392&lt;/span&gt;,&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#080;font-style:italic"&gt;# scap kernel-side counters&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;&amp;#34;scap.evts_drop_rate_sec&amp;#34;: &lt;/span&gt;&lt;span style="color:#666"&gt;0.0&lt;/span&gt;,&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#080;font-style:italic"&gt;# Taken between 2 metrics snapshots&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;&amp;#34;scap.evts_rate_sec&amp;#34;: &lt;/span&gt;&lt;span style="color:#666"&gt;93546.8&lt;/span&gt;,&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#080;font-style:italic"&gt;# Taken between 2 metrics snapshots&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;&amp;#34;scap.n_drops&amp;#34;: &lt;/span&gt;&lt;span style="color:#666"&gt;0&lt;/span&gt;,&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#080;font-style:italic"&gt;# Monotonic counter all-time kernel side drops&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#080;font-style:italic"&gt;# Coarse-grained (non-comprehensive) categories for more granular insights&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;&amp;#34;scap.n_drops_buffer_clone_fork_exit&amp;#34;: &lt;/span&gt;&lt;span style="color:#666"&gt;0&lt;/span&gt;,&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;&amp;#34;scap.n_drops_buffer_close_exit&amp;#34;: &lt;/span&gt;&lt;span style="color:#666"&gt;0&lt;/span&gt;,&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;&amp;#34;scap.n_drops_buffer_connect_enter&amp;#34;: &lt;/span&gt;&lt;span style="color:#666"&gt;0&lt;/span&gt;,&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;&amp;#34;scap.n_drops_buffer_connect_exit&amp;#34;: &lt;/span&gt;&lt;span style="color:#666"&gt;0&lt;/span&gt;,&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;&amp;#34;scap.n_drops_buffer_dir_file_exit&amp;#34;: &lt;/span&gt;&lt;span style="color:#666"&gt;0&lt;/span&gt;,&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;&amp;#34;scap.n_drops_buffer_execve_exit&amp;#34;: &lt;/span&gt;&lt;span style="color:#666"&gt;0&lt;/span&gt;,&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;&amp;#34;scap.n_drops_buffer_open_enter&amp;#34;: &lt;/span&gt;&lt;span style="color:#666"&gt;0&lt;/span&gt;,&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;&amp;#34;scap.n_drops_buffer_open_exit&amp;#34;: &lt;/span&gt;&lt;span style="color:#666"&gt;0&lt;/span&gt;,&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;&amp;#34;scap.n_drops_buffer_other_interest_exit&amp;#34;: &lt;/span&gt;&lt;span style="color:#666"&gt;0&lt;/span&gt;,&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;&amp;#34;scap.n_drops_buffer_proc_exit&amp;#34;: &lt;/span&gt;&lt;span style="color:#666"&gt;0&lt;/span&gt;,&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;&amp;#34;scap.n_drops_buffer_total&amp;#34;: &lt;/span&gt;&lt;span style="color:#666"&gt;0&lt;/span&gt;,&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;&amp;#34;scap.n_drops_bug&amp;#34;: &lt;/span&gt;&lt;span style="color:#666"&gt;0&lt;/span&gt;,&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;&amp;#34;scap.n_drops_page_faults&amp;#34;: &lt;/span&gt;&lt;span style="color:#666"&gt;0&lt;/span&gt;,&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;&amp;#34;scap.n_drops_perc&amp;#34;: &lt;/span&gt;&lt;span style="color:#666"&gt;0.0&lt;/span&gt;,&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#080;font-style:italic"&gt;# Taken between 2 metrics snapshots&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;&amp;#34;scap.n_drops_prev&amp;#34;: &lt;/span&gt;&lt;span style="color:#666"&gt;0&lt;/span&gt;,&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;&amp;#34;scap.n_drops_scratch_map&amp;#34;: &lt;/span&gt;&lt;span style="color:#666"&gt;0&lt;/span&gt;,&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;&amp;#34;scap.n_evts&amp;#34;: &lt;/span&gt;&lt;span style="color:#666"&gt;48528636923&lt;/span&gt;,&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;&amp;#34;scap.n_evts_prev&amp;#34;: &lt;/span&gt;&lt;span style="color:#666"&gt;48191868502&lt;/span&gt;,&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#080;font-style:italic"&gt;# libbpf stats -&amp;gt; all-time kernel tracepoints invocations stats for a x86_64 machine&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;&amp;#34;scap.sched_process_e.avg_time_ns&amp;#34;: &lt;/span&gt;&lt;span style="color:#666"&gt;2041&lt;/span&gt;,&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#080;font-style:italic"&gt;# scheduler process exit tracepoint&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;&amp;#34;scap.sched_process_e.run_cnt&amp;#34;: &lt;/span&gt;&lt;span style="color:#666"&gt;151463770&lt;/span&gt;,&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;&amp;#34;scap.sched_process_e.run_time_ns&amp;#34;: &lt;/span&gt;&lt;span style="color:#666"&gt;181866667867268&lt;/span&gt;,&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;&amp;#34;scap.sys_enter.avg_time_ns&amp;#34;: &lt;/span&gt;&lt;span style="color:#666"&gt;194&lt;/span&gt;,&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#080;font-style:italic"&gt;# syscall enter (raw) tracepoint&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;&amp;#34;scap.sys_enter.run_cnt&amp;#34;: &lt;/span&gt;&lt;span style="color:#666"&gt;933995602769&lt;/span&gt;,&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;&amp;#34;scap.sys_enter.run_time_ns&amp;#34;: &lt;/span&gt;&lt;span style="color:#666"&gt;181866667867268&lt;/span&gt;,&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;&amp;#34;scap.sys_exit.avg_time_ns&amp;#34;: &lt;/span&gt;&lt;span style="color:#666"&gt;205&lt;/span&gt;,&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#080;font-style:italic"&gt;# syscall exit (raw) tracepoint&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;&amp;#34;scap.sys_exit.run_cnt&amp;#34;: &lt;/span&gt;&lt;span style="color:#666"&gt;934000454069&lt;/span&gt;,&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;&amp;#34;scap.sys_exit.run_time_ns&amp;#34;: &lt;/span&gt;&lt;span style="color:#666"&gt;192201218598457&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;},&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;&amp;#34;rule&amp;#34;: &lt;/span&gt;&lt;span style="color:#b44"&gt;&amp;#34;Falco internal: metrics snapshot&amp;#34;&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="precise-control-over-monitored-syscalls"&gt;Precise Control Over Monitored Syscalls&lt;/h2&gt;
&lt;p&gt;Since Falco 0.35.0, you have precise control over the syscalls Falco monitors. Refer to the &lt;a href="https://falco.org/blog/adaptive-syscalls-selection/"&gt;Adaptive Syscalls Selection&lt;/a&gt; blog post and carefully read the &lt;a href="https://github.com/falcosecurity/falco/blob/master/falco.yaml"&gt;base_syscalls&lt;/a&gt; config description for detailed information.&lt;/p&gt;
&lt;h3 id="run-tests-for-data-driven-insights"&gt;Run Tests for Data-Driven Insights&lt;/h3&gt;
&lt;div class="card card-sm pageinfo pageinfo-info my-4"&gt;
&lt;div class="card-body"&gt;
&lt;div class="card-text"&gt;
&lt;p&gt;Falco's current metrics system lacks direct syscalls counters to pinpoint high-volume culprits. In the meantime, deriving insights step by step is necessary until syscall counters become available in Falco's metrics system.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Generate a dummy rule designed not to trigger any alerts:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;- &lt;span style="color:#008000;font-weight:bold"&gt;macro&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;spawned_process&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;condition&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;(evt.type in (execve, execveat))&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;- &lt;span style="color:#008000;font-weight:bold"&gt;rule&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;TEST Simple Spawned Process&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;desc&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#b44"&gt;&amp;#34;Test base_syscalls config option&amp;#34;&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;enabled&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;true&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;condition&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;spawned_process and proc.name=iShouldNeverAlert&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;output&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#b44"&gt;&amp;#34;%evt.type&amp;#34;&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;priority&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;WARNING&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Now, run Falco with the dummy rule and the specified test cases (edit &lt;a href="https://github.com/falcosecurity/falco/blob/master/falco.yaml"&gt;base_syscalls&lt;/a&gt; config). If you're open to it, consider sharing anonymized logs for further assessment by Falco maintainers or the community to explore potential solutions.&lt;/p&gt;
&lt;p&gt;For each test, run Falco in dry-run debug mode initially to print the final set of syscalls.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo /usr/bin/falco -c /etc/falco/falco.yaml -r falco_rules_dummy.yaml -o &lt;span style="color:#b44"&gt;&amp;#34;log_level=debug&amp;#34;&lt;/span&gt; -o &lt;span style="color:#b44"&gt;&amp;#34;log_stderr=true&amp;#34;&lt;/span&gt; --dry-run
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#080;font-style:italic"&gt;# Example Output for Test 2&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;XXX: &lt;span style="color:#666"&gt;(&lt;/span&gt;2&lt;span style="color:#666"&gt;)&lt;/span&gt; syscalls in rules: execve, execveat
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;XXX: +&lt;span style="color:#666"&gt;(&lt;/span&gt;16&lt;span style="color:#666"&gt;)&lt;/span&gt; syscalls &lt;span style="color:#666"&gt;(&lt;/span&gt;Falco&lt;span style=""&gt;&amp;#39;&lt;/span&gt;s state engine &lt;span style="color:#a2f"&gt;set&lt;/span&gt; of syscalls&lt;span style="color:#666"&gt;)&lt;/span&gt;: capset, chdir, chroot, clone, clone3, fchdir, fork, prctl, procexit, setgid, setpgid, setresgid, setresuid, setsid, setuid, vfork
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;XXX: &lt;span style="color:#666"&gt;(&lt;/span&gt;18&lt;span style="color:#666"&gt;)&lt;/span&gt; syscalls selected in total &lt;span style="color:#666"&gt;(&lt;/span&gt;final &lt;span style="color:#a2f"&gt;set&lt;/span&gt;&lt;span style="color:#666"&gt;)&lt;/span&gt;: capset, chdir, chroot, clone, clone3, execve, execveat, fchdir, fork, prctl, procexit, setgid, setpgid, setresgid, setresuid, setsid, setuid, vfork
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Subsequently, run Falco normally.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo /usr/bin/falco -c /etc/falco/falco.yaml -r falco_rules_dummy.yaml
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Test 1: spawned_process only&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;base_syscalls&lt;/span&gt;:&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;custom_set&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;[clone, clone3, fork, vfork, execve, execveat, procexit]&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;repair&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;false&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="card card-sm pageinfo pageinfo-info my-4"&gt;
&lt;div class="card-body"&gt;
&lt;div class="card-text"&gt;
&lt;p&gt;If Test 1 already fails, and you see drops even after adjusting the &lt;code&gt;buf_size_preset&lt;/code&gt; and other parameters, Falco may be less usable on this particular system, unfortunately.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Test 2: spawned_process + minimum syscalls needed for Falco state (internal process cache table)&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;base_syscalls&lt;/span&gt;:&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;custom_set&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;[]&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;repair&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;true&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Test 3: network accept*&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;base_syscalls&lt;/span&gt;:&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;custom_set&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;[clone, clone3, fork, vfork, execve, execveat, getsockopt, socket, bind, accept, accept4, close]&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;repair&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;false&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Test 4: network connect&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;base_syscalls&lt;/span&gt;:&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;custom_set&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;[clone, clone3, fork, vfork, execve, execveat, getsockopt, socket, connect, close]&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;repair&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;false&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Test 5: open* syscalls&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;base_syscalls&lt;/span&gt;:&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;custom_set&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;[clone, clone3, fork, vfork, execve, execveat, open, openat, openat2, close]&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;repair&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;false&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Test n&lt;/p&gt;
&lt;p&gt;Continue custom testing to ensure effective monitoring of all desired syscalls on your servers without experiencing event drops or with minimal acceptable drops.&lt;/p&gt;
&lt;h3 id="at-what-kernel-event-rates-do-problems-generally-start"&gt;At What Kernel Event Rates Do Problems Generally Start?&lt;/h3&gt;
&lt;p&gt;This question presents a challenge as it's not solely about the pure &amp;quot;kernel event rate&amp;quot;. In less realistic benchmarking tests, you could artificially drive the rates very high without dropping events. Therefore, we believe it is more complex in real-life production, involving not just event rates but also the actual nature of the events, and possibly bursts of events in very short periods of time.&lt;/p&gt;
&lt;p&gt;Additionally, we believe it's best to normalize the event rates by the number of CPUs (e.g. &lt;code&gt;scap.evts_rate_sec&lt;/code&gt; / &lt;code&gt;falco.host_num_cpus&lt;/code&gt;). Busier servers with 96, 128, or more CPUs naturally have higher event rates than VMs with 12 CPUs, for instance.&lt;/p&gt;
&lt;p&gt;Nevertheless, here are some numbers we have heard from various adopters. Please take them with a grain of salt:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Less than ~1K kernel events per second per one CPU usually is not a problem, but it depends.&lt;/li&gt;
&lt;li&gt;Less than ~1.5K kernel events per second per one CPU should not be a problem, but it depends.&lt;/li&gt;
&lt;li&gt;More than 3K kernel events per second per one CPU likely could be more difficult to keep up, but it depends.&lt;/li&gt;
&lt;li&gt;Consider 1-2% of all events dropped on a smaller subset of servers in your fleet (your busy servers/clusters) as acceptable.&lt;/li&gt;
&lt;li&gt;More than 164K kernel events per second per CPU have been observed on a 128-CPU machine. Currently under exploration is how to solve this.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="references-and-community-discussions"&gt;References and Community Discussions&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/falcosecurity/libs/issues/1557"&gt;Introduce conditional kernel-side event filtering&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/falcosecurity/falco/issues/2960"&gt;New base_syscalls.exclude_enter_exit_set config&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/falcosecurity/falco/issues/2296"&gt;Improve falco benchmarking, performance, and regression tooling to better track system resources impact&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/falcosecurity/falco/issues/1403"&gt;[UMBRELLA] Dropped events&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://falco.org/blog/adaptive-syscalls-selection/"&gt;Adaptive Syscalls Selection&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>Docs: Alert Formatting</title><link>https://v0-43--falcosecurity.netlify.app/docs/concepts/outputs/formatting/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://v0-43--falcosecurity.netlify.app/docs/concepts/outputs/formatting/</guid><description>
&lt;p&gt;Previous guides introduced the &lt;a href="https://v0-43--falcosecurity.netlify.app/docs/concepts/rules/basic-elements/#output"&gt;Output Fields of Falco Rules&lt;/a&gt; and provided &lt;a href="https://v0-43--falcosecurity.netlify.app/docs/concepts/rules/style-guide/#output-fields"&gt;Guidelines&lt;/a&gt; on how to use them. This section highlights additional global formatting options for your deployment, complementing the information previously provided.&lt;/p&gt;
&lt;p&gt;Adding the same output field to multiple rules by manually editing rule files can be tedious. Fortunately, Falco provides several ways to simplify this process:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Using the &lt;code&gt;append_output&lt;/code&gt; configuration option in &lt;code&gt;falco.yaml&lt;/code&gt; to add output text or fields to a subset of loaded rules&lt;/li&gt;
&lt;li&gt;Adding an override to a specific rule to replace its output&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="appending-extra-output-and-fields-with-append-output"&gt;Appending Extra Output and Fields with &lt;code&gt;append_output&lt;/code&gt;&lt;/h2&gt;
&lt;p&gt;The &lt;code&gt;append_output&lt;/code&gt; option can be specified in the &lt;code&gt;falco.yaml&lt;/code&gt; configuration file. You can use it to add extra output to rules specified by source, tag, name, or to all rules unconditionally. The &lt;code&gt;append_output&lt;/code&gt; section is a list of items that are applied in the order they appear.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Example:&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;append_output&lt;/span&gt;:&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;- &lt;span style="color:#008000;font-weight:bold"&gt;match&lt;/span&gt;:&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;source&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;syscall&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;extra_output&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#b44"&gt;&amp;#34;on CPU %evt.cpu&amp;#34;&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;extra_fields&lt;/span&gt;:&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;- &lt;span style="color:#008000;font-weight:bold"&gt;home_directory&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#b44"&gt;&amp;#34;${HOME}&amp;#34;&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;- evt.hostname&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;In this example:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Every rule with the &lt;code&gt;syscall&lt;/code&gt; source will have &lt;code&gt;on CPU %evt.cpu&lt;/code&gt; appended at the end of the regular output line.&lt;/li&gt;
&lt;li&gt;The rule will also include the additional fields (&lt;code&gt;home_directory&lt;/code&gt; and &lt;code&gt;evt.hostname&lt;/code&gt;) in the JSON output under &lt;code&gt;output_fields&lt;/code&gt;. These extra fields do not appear in the regular (text) output.&lt;/li&gt;
&lt;li&gt;Environment variables (like &lt;code&gt;$HOME&lt;/code&gt;) expansion is supported in the configuration file, so for &lt;code&gt;extra_fields&lt;/code&gt; as well.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="matching-rules"&gt;Matching Rules&lt;/h3&gt;
&lt;p&gt;The &lt;code&gt;match&lt;/code&gt; section allows you to filter which rules are modified:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;source&lt;/code&gt;: filters rules by source (e.g., &lt;code&gt;syscall&lt;/code&gt; or plugin names)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;rule&lt;/code&gt;: filters by the complete rule name&lt;/li&gt;
&lt;li&gt;&lt;code&gt;tags&lt;/code&gt;: filters by a list of tags (all listed tags must be present)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If multiple conditions are specified under &lt;code&gt;match&lt;/code&gt;, all must be met for the entry to apply. If no conditions are specified—or &lt;code&gt;match&lt;/code&gt; is omitted—then the entry applies to all rules.&lt;/p&gt;
&lt;h2 id="adding-an-override-to-a-specific-rule"&gt;Adding an Override to a Specific Rule&lt;/h2&gt;
&lt;p&gt;Note that &lt;code&gt;append_output&lt;/code&gt; only &lt;em&gt;adds&lt;/em&gt; output to an existing rule; it does not remove or replace existing fields. To remove or replace output fields, you can add another rule file (loaded after the original) that uses an &lt;a href="https://v0-43--falcosecurity.netlify.app/docs/rules/overriding/#append-and-replace-items-in-a-rule"&gt;override&lt;/a&gt;. For example:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;- &lt;span style="color:#008000;font-weight:bold"&gt;rule&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;Read sensitive file trusted after startup&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;output&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;A file (user=%user.name command=%proc.cmdline file=%fd.name) was read after startup&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;override&lt;/span&gt;:&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;output&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;replace&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="suggested-output-fields"&gt;Suggested Output Fields&lt;/h3&gt;
&lt;p&gt;By default, Falco can also include &amp;quot;suggested&amp;quot; fields from plugins implementing the extraction capabilities. This is especially useful if certain plugins mark some fields as recommended for output. Those fields will appear automatically in your alerts.&lt;/p&gt;
&lt;p&gt;Below is an example configuration entry that enables suggested output fields unconditionally for any source:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;append_output&lt;/span&gt;:&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;- &lt;span style="color:#008000;font-weight:bold"&gt;suggested_output&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;true&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#080;font-style:italic"&gt;# Enable the use of extractor plugins&amp;#39; suggested fields for all matching sources.&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;When &lt;code&gt;suggested_output&lt;/code&gt; is set to &lt;code&gt;true&lt;/code&gt;, any extractor plugin that provides &amp;quot;suggested&amp;quot; fields will add them to the output in the form &lt;code&gt;plugin_field_name=$plugin.field_name&lt;/code&gt;.&lt;/p&gt;
&lt;h3 id="command-line-usage"&gt;Command-Line Usage&lt;/h3&gt;
&lt;p&gt;You can also specify this option on the command line via the &lt;code&gt;-o&lt;/code&gt; flag, for example:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;falco ... &lt;span style="color:#b62;font-weight:bold"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; -o &lt;span style="color:#b44"&gt;&amp;#39;append_output[]={&amp;#34;match&amp;#34;: {&amp;#34;source&amp;#34;: &amp;#34;syscall&amp;#34;}, &amp;#34;extra_output&amp;#34;: &amp;#34;on CPU %evt.cpu&amp;#34;, &amp;#34;extra_fields&amp;#34;: [&amp;#34;evt.hostname&amp;#34;]}&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description></item><item><title>Docs: How to Share Your Falco Rules</title><link>https://v0-43--falcosecurity.netlify.app/docs/contribute/share-rules/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://v0-43--falcosecurity.netlify.app/docs/contribute/share-rules/</guid><description>
&lt;p&gt;You can open a PR against the &lt;a href="https://github.com/falcosecurity/rules"&gt;rules repo&lt;/a&gt; to share your rule with the community. The PR review process ensures that the rules align with the project's best interests as per our &lt;a href="https://github.com/falcosecurity/evolution/blob/main/GOVERNANCE.md"&gt;governance&lt;/a&gt;, follow the &lt;a href="https://v0-43--falcosecurity.netlify.app/docs/rules/style-guide/"&gt;style guide&lt;/a&gt;, and meet the additional requirements, including testing and maturity level outlined in the &lt;a href="https://github.com/falcosecurity/rules"&gt;rules repo&lt;/a&gt; contributing guide. Reviewers will support you throughout the process.&lt;/p&gt;</description></item><item><title>Docs: Kernel Events Architecture</title><link>https://v0-43--falcosecurity.netlify.app/docs/concepts/event-sources/kernel/architecture/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://v0-43--falcosecurity.netlify.app/docs/concepts/event-sources/kernel/architecture/</guid><description>
&lt;p&gt;This document describes the overall architecture that allows events from kernel sources to be ingested by Falco, how to use the libraries to inspect the data collection flow and how Falco manages the boundary between the kernel and userspace. In order to make Falco compatible with a very large number of Linux Kernel versions, the internal APIs and low level communication mechanisms that are employed to cross the kernel and userspace boundary vary greatly between driver types and may be different between driver versions or kernel versions. However, they all implement the same event collection interface as described below.&lt;/p&gt;
&lt;h2 id="how-falco-interacts-with-kernel-components"&gt;How Falco interacts with kernel components&lt;/h2&gt;
&lt;p&gt;The component of the &lt;a href="https://github.com/falcosecurity/libs"&gt;Falco libraries&lt;/a&gt; that gathers data from the syscalls and interacts with the kernel is called &lt;code&gt;libscap&lt;/code&gt;. Internally, it implements all functionality required to use the drivers to collect kernel events.&lt;/p&gt;
&lt;p&gt;When using the kernel module or legacy eBPF probe (deprecated), the driver will need to be installed and deployed separately as a kernel object or probe, while the modern eBPF probe can be installed directly by libscap.&lt;/p&gt;
&lt;p&gt;Upon connection to its kernel counterpart, libscap will need to negotiate the API Version and Schema Version that the driver recognizes. These versions are expressed with a &lt;a href="https://semver.org/"&gt;semver&lt;/a&gt; subset and are &lt;a href="https://github.com/falcosecurity/libs/blob/master/driver/README.VERSION.md"&gt;documented in the libs repository&lt;/a&gt;.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The &lt;a href="https://github.com/falcosecurity/libs/blob/master/driver/README.VERSION.md#api-version-number"&gt;API version&lt;/a&gt; refers to the communication mechanism between the kernel and userspace. Every driver has a different communication mechanism which changes between versions. The kernel module may use &lt;code&gt;ioctl&lt;/code&gt;s and a ring buffer, while the eBPF probe can use maps and different APIs depending on the kernel version and eBPF probe edition. Since some drivers can be deployed separately from Falco, at startup libscap will verify if the driver it's connecting to is compatible.&lt;/li&gt;
&lt;li&gt;The &lt;a href="https://github.com/falcosecurity/libs/blob/master/driver/README.VERSION.md#api-version-number"&gt;Schema version&lt;/a&gt; refers to the type of events that the specific driver supports. The &lt;a href="https://v0-43--falcosecurity.netlify.app/docs/reference/rules/supported-events/"&gt;Syscall Events&lt;/a&gt; documentation page shows the list of fields that are supported for each version of Falco. Every time that list changes the version number is updated as well.&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;
&lt;img style="width: 60%; margin: auto"
alt="Initializing kernel source data collection"
src="https://v0-43--falcosecurity.netlify.app/docs/images/kernel_source_start_capture.png" &gt;
&lt;/div&gt;
&lt;p&gt;When running Falco it is possible to verify the currently compatible version numbers with &lt;code&gt;falco --version&lt;/code&gt;. For instance, this is the output for Falco 0.35.1:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;# falco --version
2023-07-01T16:23:43+0000: Falco version: 0.35.1 (x86_64)
2023-07-01T16:23:43+0000: Falco initialized with configuration file: /etc/falco/falco.yaml
Falco version: 0.35.1
Libs version: 0.11.3
Plugin API: 3.0.0
Engine: 17
Driver:
API version: 4.0.0
Schema version: 2.0.0
Default driver: 5.0.1+driver
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Once Falco is running, a stream of events is returned directly from the kernel. libscap's API allow the data to flow with a consistent format from the kernel to userspace.&lt;/p&gt;
&lt;p&gt;The main interface that governs this is the scap event format. Once the chosen driver is loaded and initialized in the kernel, the events are encoded with a specific header and a payload:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code class="language-Cpp=" data-lang="Cpp="&gt;struct ppm_evt_hdr {
uint64_t ts; /* timestamp, in nanoseconds from epoch */
uint64_t tid; /* the tid of the thread that generated this event */
uint32_t len; /* the event len, including the header */
uint16_t type; /* the event type */
uint32_t nparams; /* the number of parameters of the event */
};
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;The payload contains an array of lengths of each parameter followed by the content of the parameters themselves. The parameter type is a numeric identifer that maps with each event documented in the reference.&lt;/p&gt;
&lt;p&gt;For example, the &lt;code&gt;dup3&lt;/code&gt; event is defined in the reference as:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;dup3&lt;/strong&gt;(FD res, FD oldfd, FD newfd, FLAGS32 flags: &lt;em&gt;O_LARGEFILE&lt;/em&gt;, &lt;em&gt;O_DIRECTORY&lt;/em&gt;, &lt;em&gt;O_DIRECT&lt;/em&gt;, &lt;em&gt;O_TRUNC&lt;/em&gt;, &lt;em&gt;O_SYNC&lt;/em&gt;, &lt;em&gt;O_NONBLOCK&lt;/em&gt;, &lt;em&gt;O_EXCL&lt;/em&gt;, &lt;em&gt;O_DSYNC&lt;/em&gt;, &lt;em&gt;O_APPEND&lt;/em&gt;, &lt;em&gt;O_CREAT&lt;/em&gt;, &lt;em&gt;O_RDWR&lt;/em&gt;, &lt;em&gt;O_WRONLY&lt;/em&gt;, &lt;em&gt;O_RDONLY&lt;/em&gt;, &lt;em&gt;O_CLOEXEC&lt;/em&gt;, &lt;em&gt;O_NONE&lt;/em&gt;, &lt;em&gt;O_TMPFILE&lt;/em&gt;)&lt;/p&gt;
&lt;p&gt;Meaning that its encoding will be composed of an header containing the timestamp and tid, &lt;code&gt;nparams&lt;/code&gt; will be 4 and the complete encoding will be:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;[header] [uint16(8)] [uint16(8)] [uint16(8)] [uint16(32)] [res] [oldfd] [newfd] [flags]
&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;
&lt;img style="width: 60%; margin: auto"
alt="Retrieving kernel events"
src="https://v0-43--falcosecurity.netlify.app/docs/images/kernel_source_capture.png" &gt;
&lt;/div&gt;
&lt;h2 id="use-scap-open-to-inspect-kernel-data-collection"&gt;Use scap-open to inspect kernel data collection&lt;/h2&gt;
&lt;p&gt;Contributors and expert users can find a tool called &lt;a href="https://github.com/falcosecurity/libs/tree/master/userspace/libscap/examples/01-open"&gt;scap-open&lt;/a&gt; in the libs repo. This tool allows to dump raw events from a variety of drivers. Building and usage instructions are included in the repository.&lt;/p&gt;</description></item><item><title>Docs: Try Falco on Kubernetes</title><link>https://v0-43--falcosecurity.netlify.app/docs/getting-started/falco-kubernetes-quickstart/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://v0-43--falcosecurity.netlify.app/docs/getting-started/falco-kubernetes-quickstart/</guid><description>
&lt;p&gt;First, ensure you can access a test Kubernetes cluster running with Linux nodes, either x86_64 or ARM64. Note that using Docker Desktop on Windows or macOS will not work for this purpose. Also, you will need to have &lt;a href="https://kubernetes.io/docs/tasks/tools/"&gt;kubectl&lt;/a&gt; and &lt;a href="https://helm.sh/docs/intro/install/"&gt;helm&lt;/a&gt; installed and configured.&lt;/p&gt;
&lt;h2 id="deploy-falco"&gt;Deploy Falco&lt;/h2&gt;
&lt;p&gt;First, install the helm repository:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;helm repo add falcosecurity https://falcosecurity.github.io/charts
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;helm repo update
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Then install Falco:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;helm install --replace falco --namespace falco --create-namespace --set &lt;span style="color:#b8860b"&gt;tty&lt;/span&gt;&lt;span style="color:#666"&gt;=&lt;/span&gt;&lt;span style="color:#a2f"&gt;true&lt;/span&gt; falcosecurity/falco
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;And check that the Falco pods are running:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;kubectl get pods -n falco
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Falco pod(s) might need a few seconds to start. Wait until they are ready:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;kubectl &lt;span style="color:#a2f"&gt;wait&lt;/span&gt; pods --for&lt;span style="color:#666"&gt;=&lt;/span&gt;&lt;span style="color:#b8860b"&gt;condition&lt;/span&gt;&lt;span style="color:#666"&gt;=&lt;/span&gt;Ready --all -n falco
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Falco comes with a &lt;a href="https://github.com/falcosecurity/rules/blob/main/rules/falco_rules.yaml"&gt;pre-installed set of rules&lt;/a&gt; that alert you upon suspicious behavior.&lt;/p&gt;
&lt;h2 id="trigger-a-rule"&gt;Trigger a rule&lt;/h2&gt;
&lt;p&gt;Let's create a deployment:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;kubectl create deployment nginx --image&lt;span style="color:#666"&gt;=&lt;/span&gt;nginx
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;And execute a command that would trigger a rule:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;kubectl &lt;span style="color:#a2f"&gt;exec&lt;/span&gt; -it &lt;span style="color:#a2f;font-weight:bold"&gt;$(&lt;/span&gt;kubectl get pods --selector&lt;span style="color:#666"&gt;=&lt;/span&gt;&lt;span style="color:#b8860b"&gt;app&lt;/span&gt;&lt;span style="color:#666"&gt;=&lt;/span&gt;nginx -o name&lt;span style="color:#a2f;font-weight:bold"&gt;)&lt;/span&gt; -- cat /etc/shadow
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Now let's take a look at the Falco logs:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;kubectl logs -l app.kubernetes.io/name&lt;span style="color:#666"&gt;=&lt;/span&gt;falco -n falco -c falco | grep Warning
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;You will see logs for all the Falco pods deployed on the system. The Falco pod corresponding to the node in which our nginx deployment is running has detected the event, and you'll be able to read a line like:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-plain" data-lang="plain"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;09:46:05.727801343: Warning Sensitive file opened for reading by non-trusted program (file=/etc/shadow gparent=systemd ggparent=&amp;lt;NA&amp;gt; gggparent=&amp;lt;NA&amp;gt; evt_type=openat user=root user_uid=0 user_loginuid=-1 process=cat proc_exepath=/usr/bin/cat parent=containerd-shim command=cat /etc/shadow terminal=34816 container_id=bf74f1749e23 container_image=docker.io/library/nginx container_image_tag=latest container_name=nginx k8s_ns=default k8s_pod_name=nginx-7854ff8877-h97p4)
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;This is your first Falco event 🦅! If you are curious, &lt;a href="https://github.com/falcosecurity/rules/blob/c0a9bf17d5451340ab8a497efae1b8a8bd95adcb/rules/falco_rules.yaml#L398"&gt;this&lt;/a&gt; is the rule that describes it.&lt;/p&gt;
&lt;h2 id="create-a-custom-rule"&gt;Create a custom rule&lt;/h2&gt;
&lt;p&gt;Now it's time to create our own rule and load it into Falco. We can be pretty creative with them, but let's stick with something simple. This time, we want to be alerted when any file is opened for writing in the &lt;code&gt;/etc&lt;/code&gt; directory, either on the host or inside containers.&lt;/p&gt;
&lt;p&gt;Create a file and call it &lt;code&gt;falco_custom_rules_cm.yaml&lt;/code&gt; with the following content:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;customRules&lt;/span&gt;:&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;custom-rules.yaml&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;|-&lt;span style="color:#b44;font-style:italic"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#b44;font-style:italic"&gt; - rule: Write below etc
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#b44;font-style:italic"&gt; desc: An attempt to write to /etc directory
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#b44;font-style:italic"&gt; condition: &amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#b44;font-style:italic"&gt; (evt.type in (open,openat,openat2) and evt.is_open_write=true and fd.typechar=&amp;#39;f&amp;#39; and fd.num&amp;gt;=0)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#b44;font-style:italic"&gt; and fd.name startswith /etc
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#b44;font-style:italic"&gt; output: &amp;#34;File below /etc opened for writing | file=%fd.name pcmdline=%proc.pcmdline gparent=%proc.aname[2] ggparent=%proc.aname[3] gggparent=%proc.aname[4] evt_type=%evt.type user=%user.name user_uid=%user.uid user_loginuid=%user.loginuid process=%proc.name proc_exepath=%proc.exepath parent=%proc.pname command=%proc.cmdline terminal=%proc.tty&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#b44;font-style:italic"&gt; priority: WARNING
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#b44;font-style:italic"&gt; tags: [filesystem, mitre_persistence]&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;And load it into Falco:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;helm upgrade --namespace falco falco falcosecurity/falco --set &lt;span style="color:#b8860b"&gt;tty&lt;/span&gt;&lt;span style="color:#666"&gt;=&lt;/span&gt;&lt;span style="color:#a2f"&gt;true&lt;/span&gt; -f falco_custom_rules_cm.yaml
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Falco pod(s) might need a few seconds to restart. Wait until they are ready:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;kubectl &lt;span style="color:#a2f"&gt;wait&lt;/span&gt; pods --for&lt;span style="color:#666"&gt;=&lt;/span&gt;&lt;span style="color:#b8860b"&gt;condition&lt;/span&gt;&lt;span style="color:#666"&gt;=&lt;/span&gt;Ready --all -n falco
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Then trigger our new rule:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;kubectl &lt;span style="color:#a2f"&gt;exec&lt;/span&gt; -it &lt;span style="color:#a2f;font-weight:bold"&gt;$(&lt;/span&gt;kubectl get pods --selector&lt;span style="color:#666"&gt;=&lt;/span&gt;&lt;span style="color:#b8860b"&gt;app&lt;/span&gt;&lt;span style="color:#666"&gt;=&lt;/span&gt;nginx -o name&lt;span style="color:#a2f;font-weight:bold"&gt;)&lt;/span&gt; -- touch /etc/test_file_for_falco_rule
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;And look at the logs:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;kubectl logs -l app.kubernetes.io/name&lt;span style="color:#666"&gt;=&lt;/span&gt;falco -n falco -c falco | grep Warning
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;You should see a log entry like the one below:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-plain" data-lang="plain"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;13:14:27.811647863: Warning File below /etc opened for writing (file=/etc/test_file_for_falco_rule pcmdline=containerd-shim -namespace k8s.io -id d5438fedb274ac82963d99987313dae8da512236ace2f70472a772d95090b607 -address /run/containerd/containerd.sock gparent=systemd ggparent=&amp;lt;NA&amp;gt; gggparent=&amp;lt;NA&amp;gt; evt_type=openat user=root user_uid=0 user_loginuid=-1 process=touch proc_exepath=/usr/bin/touch parent=containerd-shim command=touch /etc/test_file_for_falco_rule terminal=34816 container_id=bf74f1749e23 container_image=docker.io/library/nginx container_image_tag=latest container_name=nginx k8s_ns=default k8s_pod_name=nginx-7854ff8877-h97p4)
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="deploy-falcosidekick-and-falcosidekick-ui"&gt;Deploy Falcosidekick and Falcosidekick UI&lt;/h2&gt;
&lt;p&gt;In the previous step we displayed the rule output by examining the Falco log for the pod in the cluster that is running on the node. Now we will see how we can forward these alerts to a custom location or display them in a clean GUI. There are many ways to accomplish this but one is by using &lt;a href="https://github.com/falcosecurity/falcosidekick"&gt;Falcosidekick&lt;/a&gt; which can easily be deployed with the same Helm chart.&lt;/p&gt;
&lt;p&gt;Install Falcosidekick and Falcosidekick-UI in your test cluster:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;helm upgrade --namespace falco falco falcosecurity/falco -f falco_custom_rules_cm.yaml --set falcosidekick.enabled&lt;span style="color:#666"&gt;=&lt;/span&gt;&lt;span style="color:#a2f"&gt;true&lt;/span&gt; --set falcosidekick.webui.enabled&lt;span style="color:#666"&gt;=&lt;/span&gt;&lt;span style="color:#a2f"&gt;true&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Now check that it is running and its service is set up:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;kubectl -n falco get svc
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;You should see something like this:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
falco-falcosidekick ClusterIP 10.43.212.119 &amp;lt;none&amp;gt; 2801/TCP 61s
falco-falcosidekick-ui ClusterIP 10.43.35.87 &amp;lt;none&amp;gt; 2802/TCP 60s
&lt;/code&gt;&lt;/pre&gt;&lt;h3 id="display-events-in-the-falcosidekick-ui"&gt;Display events in the Falcosidekick UI&lt;/h3&gt;
&lt;p&gt;Forward the UI port, which is 2802:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;kubectl -n falco port-forward svc/falco-falcosidekick-ui &lt;span style="color:#666"&gt;2802&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;And point your browser to http://localhost:2802 . The default username and password are &lt;code&gt;admin&lt;/code&gt; / &lt;code&gt;admin&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Now click on &amp;quot;Events&amp;quot; on top of the page and trigger an event again:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;kubectl &lt;span style="color:#a2f"&gt;exec&lt;/span&gt; -it &lt;span style="color:#a2f;font-weight:bold"&gt;$(&lt;/span&gt;kubectl get pods --selector&lt;span style="color:#666"&gt;=&lt;/span&gt;&lt;span style="color:#b8860b"&gt;app&lt;/span&gt;&lt;span style="color:#666"&gt;=&lt;/span&gt;nginx -o name&lt;span style="color:#a2f;font-weight:bold"&gt;)&lt;/span&gt; -- cat /etc/shadow
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;You should see an event appearing in the Falcosidekick UI&lt;/p&gt;
&lt;p&gt;&lt;img src="https://v0-43--falcosecurity.netlify.app/docs/getting-started/images/falcosidekick-event.png" alt="Falcosidekick Event" loading="lazy" /&gt;
&lt;/p&gt;
&lt;p&gt;The Falcosidekick UI can be used to quickly display events but most likely on a production system you will want to forward events to a centralized location. Falcosidekick supports more than 60 integrations. You can find an example below but you can refer to &lt;a href="https://v0-43--falcosecurity.netlify.app/docs/outputs/forwarding/"&gt;the forwarding documentation&lt;/a&gt; to learn more.&lt;/p&gt;
&lt;h3 id="forward-events-to-a-slack-webhook"&gt;Forward events to a Slack webhook&lt;/h3&gt;
&lt;p&gt;Deploy Falco again, this time disabling the web UI and enabling Slack forwarding. Of course, you can enable both if you wish.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;helm upgrade --namespace falco falco falcosecurity/falco &lt;span style="color:#b62;font-weight:bold"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; --set falcosidekick.enabled&lt;span style="color:#666"&gt;=&lt;/span&gt;&lt;span style="color:#a2f"&gt;true&lt;/span&gt; &lt;span style="color:#b62;font-weight:bold"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; --set falcosidekick.config.slack.webhookurl&lt;span style="color:#666"&gt;=&lt;/span&gt;YOUR_WEBHOOK_URL_HERE &lt;span style="color:#b62;font-weight:bold"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; --set falcosidekick.config.slack.minimumpriority&lt;span style="color:#666"&gt;=&lt;/span&gt;notice
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;If Slack is configured correctly, when an event is triggered you should receive a message like the following:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://v0-43--falcosecurity.netlify.app/docs/getting-started/images/slack-output.png" alt="Slack output" loading="lazy" /&gt;
&lt;/p&gt;
&lt;h2 id="cleanup"&gt;Cleanup&lt;/h2&gt;
&lt;p&gt;If you wish to remove Falco from your cluster you can simply run:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;helm -n falco uninstall falco
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description></item><item><title>Docs: How Falco Uses Plugins</title><link>https://v0-43--falcosecurity.netlify.app/docs/concepts/plugins/usage/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://v0-43--falcosecurity.netlify.app/docs/concepts/plugins/usage/</guid><description>
&lt;p&gt;Falco loads plugins based on configuration in &lt;a href="https://github.com/falcosecurity/falco/blob/master/falco.yaml"&gt;&lt;code&gt;falco.yaml&lt;/code&gt;&lt;/a&gt;. Currently, if a plugin with event sourcing capability is loaded then the &lt;em&gt;only&lt;/em&gt; events processed are from that plugin; syscall events are disabled. There are other restrictions on loaded plugins (see below).&lt;/p&gt;
&lt;h2 id="loading-plugins-in-falco"&gt;Loading plugins in Falco&lt;/h2&gt;
&lt;p&gt;The new &lt;code&gt;plugins&lt;/code&gt; property in &lt;code&gt;falco.yaml&lt;/code&gt; will define the set of plugins that Falco can load, and a new &lt;code&gt;load_plugins&lt;/code&gt; property will control which plugins are actually loaded when Falco starts.&lt;/p&gt;
&lt;p&gt;Here's an example:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;plugins&lt;/span&gt;:&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;- &lt;span style="color:#008000;font-weight:bold"&gt;name&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;cloudtrail&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;library_path&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;libcloudtrail.so&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;init_config&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#b44"&gt;&amp;#34;&amp;#34;&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;open_params&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#b44"&gt;&amp;#34;&amp;#34;&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;- &lt;span style="color:#008000;font-weight:bold"&gt;name&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;json&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;library_path&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;libjson.so&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;init_config&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#b44"&gt;&amp;#34;&amp;#34;&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#080;font-style:italic"&gt;# Optional&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;load_plugins&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;[cloudtrail, json]&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;div class="alert alert-primary" role="alert"&gt;
For more information, see &lt;a href="https://v0-43--falcosecurity.netlify.app/docs/reference/daemon/config-options/"&gt;Falco Config Options&lt;/a&gt;.
&lt;/div&gt;
&lt;p&gt;The mechanics of loading a plugin are implemented in the libraries and leverage the dynamic library functionality of the operating system (dlopen/dlsym in unix, LoadLibrary/GetProcAddress in Windows). The plugin loading code also ensures that:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The plugin is valid, i.e. that it exports the set of expected symbols&lt;/li&gt;
&lt;li&gt;The plugin has an API version number that is compatible with the plugin framework.&lt;/li&gt;
&lt;li&gt;That only one plugin with event sourcing capability is loaded at a time for a given event source&lt;/li&gt;
&lt;li&gt;If a mix of plugins for both event sourcing and field extraction are loaded for a given event source, that the exported fields have unique names that don't overlap across plugins&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="event-sources-and-falco-rules"&gt;Event Sources and Falco Rules&lt;/h2&gt;
&lt;p&gt;Falco rules already have the notion of a &lt;em&gt;source&lt;/em&gt;, using the &lt;code&gt;source&lt;/code&gt; property in YAML rules objects. There is primarily one kind of event source: &lt;code&gt;syscall&lt;/code&gt;. The &lt;code&gt;source&lt;/code&gt; property in Falco rules maps a given rule to the event source on which the rule runs.&lt;/p&gt;
&lt;p&gt;For example, given a plugin providing events with source &lt;code&gt;aws_cloudtrail&lt;/code&gt;, and a Falco rule with &lt;code&gt;source&lt;/code&gt; property &lt;code&gt;aws_cloudtrail&lt;/code&gt;, the rule will be evaluated for any events returned by the AWS CloudTrail plugin.&lt;/p&gt;
&lt;p&gt;Similarly, a plugin with field extraction capability that includes &lt;code&gt;aws_cloudtrail&lt;/code&gt; in its set of event sources will have the opportunity to extract information from CloudTrail events. As a result, fields exported by the plugin can be put in a rule's condition, exception, or output properties when the rule has a source &lt;code&gt;aws_cloudtrail&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Falco compiles rules/macros/lists selectively based on the set of loaded plugins (specifically, their event sources), instead of unconditionally as Falco is started. This is especially important for macros, which do not contain a &lt;code&gt;source&lt;/code&gt; property, but might contain fields that are only implemented by a given plugin.&lt;/p&gt;
&lt;h2 id="plugin-versions-and-falco-rules"&gt;Plugin Versions and Falco Rules&lt;/h2&gt;
&lt;p&gt;To allow rules files to document the plugin versions they are compatible with, rules files can have a new top-level field &lt;code&gt;required_plugin_versions&lt;/code&gt;. The field is optional, and if not provided no plugin compatibility checks will be performed. The syntax of &lt;code&gt;required_plugin_versions&lt;/code&gt; is the following:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;- &lt;span style="color:#008000;font-weight:bold"&gt;required_plugin_versions&lt;/span&gt;:&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;- &lt;span style="color:#008000;font-weight:bold"&gt;name&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;&amp;lt;plugin_name&amp;gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;version&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;x.y.z&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;...&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Below required_plugin_versions is a list of objects, where each object has &lt;code&gt;name&lt;/code&gt; and &lt;code&gt;version&lt;/code&gt; properties. If a plugin is loaded, and if an entry in &lt;code&gt;required_plugin_versions&lt;/code&gt; has a matching name, then the loaded plugin version must be semver compatible with the version property.&lt;/p&gt;
&lt;p&gt;Falco can load multiple rules files, and each file may contain its own &lt;code&gt;required_plugin_versions&lt;/code&gt; property. In this case, name+version pairs across all files will be merged, and in the case of duplicate names all provided versions must be compatible.&lt;/p&gt;
&lt;h2 id="plugin-developer-s-guide"&gt;Plugin Developer's Guide&lt;/h2&gt;
&lt;p&gt;If you are interested in authoring your own plugin, or modifying an existing plugin to add new functionality, we've written a &lt;a href="https://v0-43--falcosecurity.netlify.app/docs/developer-guide/plugins/"&gt;developer's guide&lt;/a&gt; that documents the full plugin APIs and walks through two existing plugins to show how the API is used.&lt;/p&gt;</description></item><item><title>Docs: Macros to Override</title><link>https://v0-43--falcosecurity.netlify.app/docs/reference/rules/macros-override/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://v0-43--falcosecurity.netlify.app/docs/reference/rules/macros-override/</guid><description>
&lt;p&gt;Falco also provide Macros that should be overridden by the user to provide settings that are specific to a user's environment. The provided Macros can also be appended to in a local rules file.&lt;/p&gt;
&lt;p&gt;The below macros contain values that can be overridden for a user's specific environment.&lt;/p&gt;
&lt;h3 id="common-ssh-port"&gt;Common SSH Port&lt;/h3&gt;
&lt;p&gt;Override this macro to reflect ports in your environment that provide SSH services.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;- &lt;span style="color:#008000;font-weight:bold"&gt;macro&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;ssh_port&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;condition&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;fd.sport=22&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3 id="allowed-ssh-hosts"&gt;Allowed SSH Hosts&lt;/h3&gt;
&lt;p&gt;Override this macro to reflect hosts that can connect to known SSH ports (ie a bastion or jump box).&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;- &lt;span style="color:#008000;font-weight:bold"&gt;macro&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;allowed_ssh_hosts&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;condition&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;ssh_port&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3 id="user-trusted-containers"&gt;User Trusted Containers&lt;/h3&gt;
&lt;p&gt;Allowlist containers that are allowed to run in privileged mode.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;- &lt;span style="color:#008000;font-weight:bold"&gt;macro&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;user_trusted_containers&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;condition&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;(container.image startswith sysdig/agent)&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3 id="containers-allowed-to-spawn-shells"&gt;Containers Allowed to Spawn Shells&lt;/h3&gt;
&lt;p&gt;Allowlist containers that are allowed to spawn shells, which may be needed if containers are used in the CI/CD pipeline.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;- &lt;span style="color:#008000;font-weight:bold"&gt;macro&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;user_shell_container_exclusions&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;condition&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;(never_true)&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3 id="containers-allowed-to-communicate-with-ec2-metadata-services"&gt;Containers Allowed to Communicate with EC2 Metadata Services&lt;/h3&gt;
&lt;p&gt;Allowlist containers that are allowed to communicate with the EC2 metadata service. Default: any container.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;- &lt;span style="color:#008000;font-weight:bold"&gt;macro&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;ec2_metadata_containers&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;condition&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;container&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3 id="kubernetes-api-server"&gt;Kubernetes API Server&lt;/h3&gt;
&lt;p&gt;Set the IP of your Kubernetes API Service here.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;- &lt;span style="color:#008000;font-weight:bold"&gt;macro&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;k8s_api_server&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;condition&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;(fd.sip=&amp;#34;1.2.3.4&amp;#34; and fd.sport=8080)&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3 id="containers-allowed-to-communicate-with-the-kubernetes-api"&gt;Containers Allowed to Communicate with the Kubernetes API&lt;/h3&gt;
&lt;p&gt;Allowlist containers that are allowed to communicate with the Kubernetes API Service. Requires k8s_api_server being set.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;- &lt;span style="color:#008000;font-weight:bold"&gt;macro&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;k8s_containers&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;condition&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;&amp;gt;&lt;span style="color:#b44;font-style:italic"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#b44;font-style:italic"&gt; (container.image startswith gcr.io/google_containers/hyperkube-amd64 or
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#b44;font-style:italic"&gt; container.image startswith gcr.io/google_containers/kube2sky or
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#b44;font-style:italic"&gt; container.image startswith sysdig/agent or
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#b44;font-style:italic"&gt; container.image startswith sysdig/falco or
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#b44;font-style:italic"&gt; container.image startswith sysdig/sysdig)&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3 id="containers-allowed-to-communicate-with-kubernetes-service-nodeports"&gt;Containers Allowed to Communicate with Kubernetes Service NodePorts&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;- &lt;span style="color:#008000;font-weight:bold"&gt;macro&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;nodeport_containers&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;condition&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;container&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description></item><item><title>Docs: Advanced Performance Tuning</title><link>https://v0-43--falcosecurity.netlify.app/docs/concepts/event-sources/kernel/tuning/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://v0-43--falcosecurity.netlify.app/docs/concepts/event-sources/kernel/tuning/</guid><description>
&lt;hr&gt;
&lt;p&gt;This document provides advanced performance tuning options for the &lt;code&gt;syscall&lt;/code&gt; data source in Falco. It is intended for users who want to optimize the performance of their Falco deployment by customizing the syscall monitoring behavior.&lt;/p&gt;
&lt;h2 id="adaptive-syscalls-selection"&gt;Adaptive syscalls selection&lt;/h2&gt;
&lt;p&gt;Falco provides users flexibility to select different syscall monitoring behaviors tailored to their specific use cases. These options offer various degrees of control over system calls, directly configured through the &lt;code&gt;falco.yaml&lt;/code&gt; file.&lt;/p&gt;
&lt;p&gt;This section outlines the available configurations and their implications.&lt;/p&gt;
&lt;h3 id="default-behavior"&gt;Default behavior&lt;/h3&gt;
&lt;p&gt;By default, Falco traces syscalls derived from:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Syscalls explicitly required by enabled Falco rules.&lt;/li&gt;
&lt;li&gt;A predefined set essential for maintaining Falco's internal state engine, defined at compile-time.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;With the default configuration:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;base_syscalls.custom_set&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;[]&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;base_syscalls.repair&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;false&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;base_syscalls.all&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;false&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;This ensures accurate state engine management but offers no end-user customization of the additional syscalls.&lt;/p&gt;
&lt;h3 id="monitoring-all-syscalls-base-syscalls-all"&gt;Monitoring all syscalls (&lt;code&gt;base_syscalls.all&lt;/code&gt;)&lt;/h3&gt;
&lt;p&gt;Setting this option to &lt;code&gt;true&lt;/code&gt; enables monitoring all events supported by Falco, including typically ignored events such as &lt;code&gt;write&lt;/code&gt;:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;base_syscalls.all&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;true&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Use with caution, as this may negatively impact performance due to increased resource usage.&lt;/p&gt;
&lt;h3 id="user-defined-syscall-set-base-syscalls-custom-set"&gt;User-defined syscall set (&lt;code&gt;base_syscalls.custom_set&lt;/code&gt;)&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;CAUTION:&lt;/strong&gt; Misconfiguration may result in incomplete event logs or disrupt Falco's tracing capabilities.&lt;/p&gt;
&lt;p&gt;This option allows you to explicitly define an additional set of syscalls to trace, supplementing those required by active Falco rules:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;base_syscalls.custom_set&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;[clone, clone3, fork, execve, execveat, close]&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;It offers fine-grained control and can help optimize resource utilization according to your threat model and performance constraints.&lt;/p&gt;
&lt;p&gt;Recommended syscall sets for typical scenarios:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Process monitoring&lt;/strong&gt;: &lt;code&gt;[clone, clone3, fork, vfork, execve, execveat, close]&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Networking monitoring&lt;/strong&gt;: &lt;code&gt;[clone, clone3, fork, vfork, execve, execveat, close, socket, bind, getsockopt]&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Accurate UID/GID tracking&lt;/strong&gt;: Add &lt;code&gt;[setresuid, setsid, setuid, setgid, setpgid, setresgid, capset, chdir, chroot, fchdir]&lt;/code&gt; to the relevant set.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Negative notation (&lt;code&gt;&amp;quot;!syscall_name&amp;quot;&lt;/code&gt;) is supported to explicitly exclude specific syscalls.&lt;/p&gt;
&lt;h3 id="automatic-state-engine-management-base-syscalls-repair"&gt;Automatic state engine management (&lt;code&gt;base_syscalls.repair&lt;/code&gt;)&lt;/h3&gt;
&lt;p&gt;Recommended for most scenarios, enabling this option allows Falco to automatically select the minimal necessary set of syscalls beyond those explicitly required by enabled rules:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;base_syscalls.repair&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;true&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;base_syscalls.custom_set&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;[]&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;base_syscalls.all&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;false&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;This option ensures Falco's internal state engine integrity with minimal performance overhead, automatically incorporating best-practice syscall configurations.&lt;/p&gt;
&lt;h2 id="scenarios"&gt;Scenarios&lt;/h2&gt;
&lt;p&gt;Different configurations address various monitoring scenarios effectively:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Monitoring spawned processes under resource constraints&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Default: Insufficient&lt;/li&gt;
&lt;li&gt;&lt;code&gt;custom_set&lt;/code&gt; and &lt;code&gt;repair&lt;/code&gt;: Both viable, but &lt;code&gt;repair&lt;/code&gt; is recommended for automatic correctness.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Monitoring spawned processes and network activity, excluding file opens&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Default: Insufficient&lt;/li&gt;
&lt;li&gt;&lt;code&gt;custom_set&lt;/code&gt; and &lt;code&gt;repair&lt;/code&gt;: Both suitable, with &lt;code&gt;repair&lt;/code&gt; ensuring automatic correctness without manual intervention.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Flexible configurability for tailored monitoring&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Useful in environments requiring selective monitoring to optimize resources.&lt;/li&gt;
&lt;li&gt;Allows coexistence with other monitoring tools by minimizing duplication of work.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Comprehensive syscall monitoring&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;All three configurations (&lt;code&gt;default&lt;/code&gt;, &lt;code&gt;custom_set&lt;/code&gt;, &lt;code&gt;repair&lt;/code&gt;) can achieve complete syscall monitoring.&lt;/li&gt;
&lt;li&gt;Choice depends on user preference and performance trade-offs.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id="notes"&gt;Notes&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Use &lt;code&gt;falco -i&lt;/code&gt; to list all events typically ignored in the default configuration.&lt;/li&gt;
&lt;li&gt;Events marked &lt;code&gt;EF_OLD_VERSION&lt;/code&gt; are not generated during live monitoring but may appear in &lt;code&gt;.scap&lt;/code&gt; files.&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>Docs: CloudTrail Events</title><link>https://v0-43--falcosecurity.netlify.app/docs/concepts/event-sources/plugins/cloudtrail/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://v0-43--falcosecurity.netlify.app/docs/concepts/event-sources/plugins/cloudtrail/</guid><description>
&lt;p&gt;The Falco &lt;a href="https://github.com/falcosecurity/plugins/tree/master/plugins/cloudtrail#readme"&gt;cloudtrail&lt;/a&gt; plugin can read &lt;a href="https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-user-guide.html"&gt;AWS CloudTrail&lt;/a&gt; logs and emit events for each CloudTrail log entry.&lt;/p&gt;
&lt;p&gt;This plug-in also includes out-of-the-box &lt;a href="https://github.com/falcosecurity/plugins/blob/master/plugins/cloudtrail/rules/aws_cloudtrail_rules.yaml"&gt;rules&lt;/a&gt; that can be used to identify interesting/suspicious/notable events in CloudTrail logs, including:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Console logins that do not use multi-factor authentication&lt;/li&gt;
&lt;li&gt;Disabling multi-factor authentication for users&lt;/li&gt;
&lt;li&gt;Disabling encryption for S3 buckets&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="configuration"&gt;Configuration&lt;/h2&gt;
&lt;p&gt;See the &lt;a href="https://github.com/falcosecurity/plugins/tree/master/plugins/cloudtrail#configuration"&gt;README&lt;/a&gt; for information on how to configure the plugin. The plugin initialization and open params strings/objects can be added to &lt;code&gt;falco.yaml&lt;/code&gt; under the &lt;code&gt;plugins&lt;/code&gt; &lt;a href="https://v0-43--falcosecurity.netlify.app/docs/reference/daemon/config-options/"&gt;configuration key&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id="methods-to-read-aws-cloudtrail-logs"&gt;Methods to read AWS CloudTrail logs&lt;/h2&gt;
&lt;p&gt;The plugin can be configured to read log files from:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;A S3 bucket&lt;/li&gt;
&lt;li&gt;A SQS queue that passes along SNS notifications about new log files&lt;/li&gt;
&lt;li&gt;A local filesystem path&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;For more information on the open params syntax, see &lt;a href="https://github.com/falcosecurity/plugins/tree/master/plugins/cloudtrail#plugin-open-params"&gt;open params&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id="terraform-module-for-cloudtrail-prerequisites"&gt;Terraform Module for CloudTrail | Prerequisites&lt;/h2&gt;
&lt;p&gt;In order to use the AWS CloudTrail plugin, you must &lt;a href="https://docs.aws.amazon.com/AmazonS3/latest/userguide/enable-cloudtrail-logging-for-s3.html"&gt;enable&lt;/a&gt; CloudTrail logging for the account(s) you want to monitor. This must be done before using the plugin.&lt;/p&gt;
&lt;p&gt;In addition, of the three options above, using an SQS queue provides the easiest-to-consume source of logs. With the SQS queue, the plugin can detect when the new log files are written and can automatically consume them.&lt;/p&gt;
&lt;p&gt;However, this also requires creating multiple AWS cloud resources, such as SQS queues, SNS topics/subscriptions, IAM policy documents, etc., outside of Falco, which involve multiple manual steps.&lt;/p&gt;
&lt;p&gt;To make this process easier, we've created a Terraform &lt;a href="https://github.com/falcosecurity/falco-aws-terraform"&gt;module&lt;/a&gt; that automatically creates these resources.&lt;/p&gt;</description></item><item><title>Docs: Alerts Forwarding</title><link>https://v0-43--falcosecurity.netlify.app/docs/concepts/outputs/forwarding/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://v0-43--falcosecurity.netlify.app/docs/concepts/outputs/forwarding/</guid><description>
&lt;p&gt;Falco alerts can easily be forwarded to third-party systems. Their JSON format allows them to be easily consumed for storage, analysis and reaction.&lt;/p&gt;
&lt;h2 id="falcosidekick"&gt;Falcosidekick&lt;/h2&gt;
&lt;p&gt;Falcosidekick is a proxy forwarder that acts as a central point for any fleet of Falco instances, using their HTTP outputs to send alerts.&lt;/p&gt;
&lt;p&gt;It supports forwarding alerts to various outputs such as chat platforms, alerting systems, logs, storage services, and streaming systems.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://v0-43--falcosecurity.netlify.app/docs/images/falcosidekick_forwarding.png" alt="Falcosidekick" loading="lazy" /&gt;
&lt;/p&gt;
&lt;p&gt;Falcosidekick can also add custom fields to the alerts, filter them by priority and expose a Prometheus metrics endpoint.&lt;/p&gt;
&lt;p&gt;The full documentation and the project repository are &lt;a href="https://github.com/falcosecurity/falcosidekick"&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Falcosidekick can be deployed with Falco in Kubernetes clusters with the official Falco &lt;a href="https://github.com/falcosecurity/charts"&gt;Helm chart&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Its configuration can be made through a yaml file and/or env vars.&lt;/p&gt;
&lt;h3 id="outputs"&gt;Outputs&lt;/h3&gt;
&lt;div class="alert alert-primary" role="alert"&gt;
Follow the links to know what are the settings of each output.
&lt;/div&gt;
&lt;p&gt;The available outputs in Falcosidekick are:&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Chat&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/falcosecurity/falcosidekick/blob/master/docs/outputs/slack.md"&gt;&lt;strong&gt;Slack&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/falcosecurity/falcosidekick/blob/master/docs/outputs/rocketchat.md"&gt;&lt;strong&gt;Rocketchat&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/falcosecurity/falcosidekick/blob/master/docs/outputs/mattermost.md"&gt;&lt;strong&gt;Mattermost&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/falcosecurity/falcosidekick/blob/master/docs/outputs/teams.md"&gt;&lt;strong&gt;Teams&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/falcosecurity/falcosidekick/blob/master/docs/outputs/webex.md"&gt;&lt;strong&gt;Webex&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/falcosecurity/falcosidekick/blob/master/docs/outputs/discord.md"&gt;&lt;strong&gt;Discord&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/falcosecurity/falcosidekick/blob/master/docs/outputs/googlechat.md"&gt;&lt;strong&gt;Google Chat&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/falcosecurity/falcosidekick/blob/master/docs/outputs/cliq.md"&gt;&lt;strong&gt;Zoho Cliq&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/falcosecurity/falcosidekick/blob/master/docs/outputs/telegram.md"&gt;&lt;strong&gt;Telegram&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;Metrics / Observability&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/falcosecurity/falcosidekick/blob/master/docs/outputs/datadog.md"&gt;&lt;strong&gt;Datadog&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/falcosecurity/falcosidekick/blob/master/docs/outputs/influxdb.md"&gt;&lt;strong&gt;Influxdb&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/falcosecurity/falcosidekick/blob/master/docs/outputs/statsd.md"&gt;&lt;strong&gt;StatsD&lt;/strong&gt;&lt;/a&gt; (for monitoring of &lt;code&gt;falcosidekick&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/falcosecurity/falcosidekick/blob/master/docs/outputs/dogstatsd.md"&gt;&lt;strong&gt;DogStatsD&lt;/strong&gt;&lt;/a&gt; (for monitoring of &lt;code&gt;falcosidekick&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/falcosecurity/falcosidekick/blob/master/docs/outputs/prometheus.md"&gt;&lt;strong&gt;Prometheus&lt;/strong&gt;&lt;/a&gt; (for both events and monitoring of &lt;code&gt;falcosidekick&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/falcosecurity/falcosidekick/blob/master/docs/outputs/wavefront.md"&gt;&lt;strong&gt;Wavefront&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/falcosecurity/falcosidekick/blob/master/docs/outputs/spyderbat.md"&gt;&lt;strong&gt;Spyderbat&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/falcosecurity/falcosidekick/blob/master/docs/outputs/timescaledb.md"&gt;&lt;strong&gt;TimescaleDB&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/falcosecurity/falcosidekick/blob/master/docs/outputs/dynatrace.md"&gt;&lt;strong&gt;Dynatrace&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/falcosecurity/falcosidekick/blob/master/docs/outputs/otlp_metrics.md"&gt;&lt;strong&gt;OTEL Metrics&lt;/strong&gt;&lt;/a&gt; (for both events and monitoring of &lt;code&gt;falcosidekick&lt;/code&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;Alerting&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/falcosecurity/falcosidekick/blob/master/docs/outputs/alertmanager.md"&gt;&lt;strong&gt;AlertManager&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/falcosecurity/falcosidekick/blob/master/docs/outputs/opsgenie.md"&gt;&lt;strong&gt;Opsgenie&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/falcosecurity/falcosidekick/blob/master/docs/outputs/pagerduty.md"&gt;&lt;strong&gt;PagerDuty&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/falcosecurity/falcosidekick/blob/master/docs/outputs/grafana_oncall.md"&gt;&lt;strong&gt;Grafana OnCall&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;Logs&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/falcosecurity/falcosidekick/blob/master/docs/outputs/elasticsearch.md"&gt;&lt;strong&gt;Elasticsearch&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/falcosecurity/falcosidekick/blob/master/docs/outputs/loki.md"&gt;&lt;strong&gt;Loki&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/falcosecurity/falcosidekick/blob/master/docs/outputs/aws_cloudwatch_logs.md"&gt;&lt;strong&gt;AWS CloudWatchLogs&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/falcosecurity/falcosidekick/blob/master/docs/outputs/grafana.md"&gt;&lt;strong&gt;Grafana&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/falcosecurity/falcosidekick/blob/master/docs/outputs/syslog.md"&gt;&lt;strong&gt;Syslog&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/falcosecurity/falcosidekick/blob/master/docs/outputs//zincsearch.md"&gt;&lt;strong&gt;Zincsearch&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/falcosecurity/falcosidekick/blob/master/docs/outputs/openobserve.md"&gt;&lt;strong&gt;OpenObserve&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/falcosecurity/falcosidekick/blob/master/docs/outputs/sumologic.md"&gt;&lt;strong&gt;SumoLogic&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/falcosecurity/falcosidekick/blob/master/docs/outputs/quickwit.md"&gt;&lt;strong&gt;Quickwit&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/falcosecurity/falcosidekick/blob/master/docs/outputs/datadog_logs.md"&gt;&lt;strong&gt;Datadog Logs&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;Object Storage&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/falcosecurity/falcosidekick/blob/master/docs/outputs/aws_s3.md"&gt;&lt;strong&gt;AWS S3&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/falcosecurity/falcosidekick/blob/master/docs/outputs/gcp_storage.md"&gt;&lt;strong&gt;GCP Storage&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/falcosecurity/falcosidekick/blob/master/docs/outputs/yandex_s3.md"&gt;&lt;strong&gt;Yandex S3 Storage&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;FaaS / Serverless&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/falcosecurity/falcosidekick/blob/master/docs/outputs/aws_lambda.md"&gt;&lt;strong&gt;AWS Lambda&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/falcosecurity/falcosidekick/blob/master/docs/outputs/gcp_cloud_run.md"&gt;&lt;strong&gt;GCP Cloud Run&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/falcosecurity/falcosidekick/blob/master/docs/outputs/gcp_cloud_functions.md"&gt;&lt;strong&gt;GCP Cloud Functions&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/falcosecurity/falcosidekick/blob/master/docs/outputs/fission.md"&gt;&lt;strong&gt;Fission&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/falcosecurity/falcosidekick/blob/master/docs/outputs/cloudevents.md"&gt;&lt;strong&gt;KNative (CloudEvents)&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/falcosecurity/falcosidekick/blob/master/docs/outputs/kubeless.md"&gt;&lt;strong&gt;Kubeless&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/falcosecurity/falcosidekick/blob/master/docs/outputs/openfaas.md"&gt;&lt;strong&gt;OpenFaaS&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/falcosecurity/falcosidekick/blob/master/docs/outputs/tekton.md"&gt;&lt;strong&gt;Tekton&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;Message queue / Streaming&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/falcosecurity/falcosidekick/blob/master/docs/outputs/nats.md"&gt;&lt;strong&gt;NATS&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/falcosecurity/falcosidekick/blob/master/docs/outputs/stan.md"&gt;&lt;strong&gt;STAN (NATS Streaming)&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/falcosecurity/falcosidekick/blob/master/docs/outputs/aws_sqs.md"&gt;&lt;strong&gt;AWS SQS&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/falcosecurity/falcosidekick/blob/master/docs/outputs/aws_sns.md"&gt;&lt;strong&gt;AWS SNS&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/falcosecurity/falcosidekick/blob/master/docs/outputs/aws_kinesis.md"&gt;&lt;strong&gt;AWS Kinesis&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/falcosecurity/falcosidekick/blob/master/docs/outputs/gcp_pub_sub.md"&gt;&lt;strong&gt;GCP PubSub&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/falcosecurity/falcosidekick/blob/master/docs/outputs/kafka.md"&gt;&lt;strong&gt;Apache Kafka&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/falcosecurity/falcosidekick/blob/master/docs/outputs/kafkarest.md"&gt;&lt;strong&gt;Kafka Rest Proxy&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/falcosecurity/falcosidekick/blob/master/docs/outputs/rabbitmq.md"&gt;&lt;strong&gt;RabbitMQ&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/falcosecurity/falcosidekick/blob/master/docs/outputs/azure_event_hub.md"&gt;&lt;strong&gt;Azure Event Hubs&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/falcosecurity/falcosidekick/blob/master/docs/outputs/yandex_datastreams.md"&gt;&lt;strong&gt;Yandex Data Streams&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/falcosecurity/falcosidekick/blob/master/docs/outputs/mqtt.md"&gt;&lt;strong&gt;MQTT&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/falcosecurity/falcosidekick/blob/master/docs/outputs/gotify.md"&gt;&lt;strong&gt;Gotify&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;Email&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/falcosecurity/falcosidekick/blob/master/docs/outputs/smtp.md"&gt;&lt;strong&gt;SMTP&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;Database&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/falcosecurity/falcosidekick/blob/master/docs/outputs/redis.md"&gt;&lt;strong&gt;Redis&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;Web&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/falcosecurity/falcosidekick/blob/master/docs/outputs/webhook.md"&gt;&lt;strong&gt;Webhook&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/falcosecurity/falcosidekick/blob/master/docs/outputs/nodered.md"&gt;&lt;strong&gt;Node-RED&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/falcosecurity/falcosidekick/blob/master/docs/outputs/falcosidekick-ui.md"&gt;&lt;strong&gt;WebUI&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;SIEM&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/falcosecurity/falcosidekick/blob/master/docs/outputs/aws_security_lake.md"&gt;&lt;strong&gt;AWS Security Lake&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;Workflow&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/falcosecurity/falcosidekick/blob/master/docs/outputs/n8n.md"&gt;&lt;strong&gt;n8n&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;Traces&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/falcosecurity/falcosidekick/blob/master/docs/outputs/otlp_traces.md"&gt;&lt;strong&gt;OTEL Traces&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;Response engine&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/falcosecurity/falcosidekick/blob/master/docs/outputs/talon.md"&gt;&lt;strong&gt;Falco Talon&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;Other&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/falcosecurity/falcosidekick/blob/master/docs/outputs/policy_report.md"&gt;&lt;strong&gt;Policy Report&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="installation-in-kubernetes-with-helm"&gt;Installation in Kubernetes with Helm&lt;/h3&gt;
&lt;p&gt;See the available &lt;a href="https://github.com/falcosecurity/charts/blob/master/charts/falcosidekick/values.yaml"&gt;Helm values&lt;/a&gt; to configure Falcosidekick.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;helm install falco falcosecurity/falco &lt;span style="color:#b62;font-weight:bold"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;-n falco --create-namespace &lt;span style="color:#b62;font-weight:bold"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;--set falcosidekick.enabled&lt;span style="color:#666"&gt;=&lt;/span&gt;&lt;span style="color:#a2f"&gt;true&lt;/span&gt; &lt;span style="color:#b62;font-weight:bold"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;--set &lt;span style="color:#b8860b"&gt;tty&lt;/span&gt;&lt;span style="color:#666"&gt;=&lt;/span&gt;&lt;span style="color:#a2f"&gt;true&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="installation-in-docker"&gt;Installation in Docker&lt;/h3&gt;
&lt;p&gt;Use the env vars to configure Falcosidekick.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;docker run -d -p 2801:2801 -e &lt;span style="color:#b8860b"&gt;SLACK_WEBHOOKURL&lt;/span&gt;&lt;span style="color:#666"&gt;=&lt;/span&gt;XXXX falcosecurity/falcosidekick:2.27.0
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="installation-on-the-host"&gt;Installation on the host&lt;/h3&gt;
&lt;p&gt;Adapt the version and the architecture to your environment. You can find all the releases &lt;a href="https://github.com/falcosecurity/falcosidekick/releases"&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo mkdir -p /etc/falcosidekick
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;wget https://github.com/falcosecurity/falcosidekick/releases/download/2.27.0/falcosidekick_2.27.0_linux_amd64.tar.gz &lt;span style="color:#666"&gt;&amp;amp;&amp;amp;&lt;/span&gt; sudo tar -C /usr/local/bin/ -xzf falcosidekick_2.27.0_linux_amd64.tar.gz
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;See the example config file to create your own in &lt;code&gt;/etc/falcosidekick/config.yaml&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;To enable and start the service, you can use a systemd unit &lt;code&gt;/etc/systemd/system/falcosidekick.service&lt;/code&gt; like this one:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#666"&gt;[&lt;/span&gt;Unit&lt;span style="color:#666"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#b8860b"&gt;Description&lt;/span&gt;&lt;span style="color:#666"&gt;=&lt;/span&gt;Falcosidekick
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#b8860b"&gt;After&lt;/span&gt;&lt;span style="color:#666"&gt;=&lt;/span&gt;network.target
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#b8860b"&gt;StartLimitIntervalSec&lt;/span&gt;&lt;span style="color:#666"&gt;=&lt;/span&gt;&lt;span style="color:#666"&gt;0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#666"&gt;[&lt;/span&gt;Service&lt;span style="color:#666"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#b8860b"&gt;Type&lt;/span&gt;&lt;span style="color:#666"&gt;=&lt;/span&gt;simple
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#b8860b"&gt;Restart&lt;/span&gt;&lt;span style="color:#666"&gt;=&lt;/span&gt;always
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#b8860b"&gt;RestartSec&lt;/span&gt;&lt;span style="color:#666"&gt;=&lt;/span&gt;&lt;span style="color:#666"&gt;1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#b8860b"&gt;ExecStart&lt;/span&gt;&lt;span style="color:#666"&gt;=&lt;/span&gt;/usr/local/bin/falcosidekick -c /etc/falcosidekick/config.yaml
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;EOF
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;systemctl &lt;span style="color:#a2f"&gt;enable&lt;/span&gt; falcosidekick
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;systemctl start falcosidekick
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="falcosidekick-ui"&gt;Falcosidekick UI&lt;/h2&gt;
&lt;p&gt;Falcosidekick comes with its own interface to visualize the events and get statistics.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://v0-43--falcosecurity.netlify.app/docs/images/falcosidekick_forwarding_ui_1.png" alt="Falcosidekick UI" loading="lazy" /&gt;
&lt;/p&gt;
&lt;h3 id="installation-in-kubernetes-with-helm-1"&gt;Installation in Kubernetes with Helm&lt;/h3&gt;
&lt;p&gt;You can install the UI at the same moment as Falcosidekick by adding the argument &lt;code&gt;--set falcosidekick.webui.enabled=true&lt;/code&gt;.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;helm install falco falcosecurity/falco &lt;span style="color:#b62;font-weight:bold"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;-n falco --create-namespace &lt;span style="color:#b62;font-weight:bold"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;--set falcosidekick.enabled&lt;span style="color:#666"&gt;=&lt;/span&gt;&lt;span style="color:#a2f"&gt;true&lt;/span&gt; &lt;span style="color:#b62;font-weight:bold"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;--set falcosidekick.webui.enabled&lt;span style="color:#666"&gt;=&lt;/span&gt;&lt;span style="color:#a2f"&gt;true&lt;/span&gt; &lt;span style="color:#b62;font-weight:bold"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;--set &lt;span style="color:#b8860b"&gt;tty&lt;/span&gt;&lt;span style="color:#666"&gt;=&lt;/span&gt;&lt;span style="color:#a2f"&gt;true&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Then create a port-forward to access it: &lt;code&gt;kubectl port-forward svc falco-falcosidekick-ui 2802:2802 -n falco&lt;/code&gt;. The default credentials are &lt;code&gt;admin/admin&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;The full documentation and the repository of the project are &lt;a href="https://github.com/falcosecurity/falcosidekick-ui"&gt;here&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>Docs: Falco Plugins Go SDK Walkthrough</title><link>https://v0-43--falcosecurity.netlify.app/docs/reference/plugins/go-sdk-walkthrough/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://v0-43--falcosecurity.netlify.app/docs/reference/plugins/go-sdk-walkthrough/</guid><description>
&lt;h2 id="introduction"&gt;Introduction&lt;/h2&gt;
&lt;p&gt;The &lt;a href="https://github.com/falcosecurity/plugin-sdk-go"&gt;Go SDK&lt;/a&gt; provides prebuilt constructs and definitions that help developing plugins by abstracting all the complexities related to the bridging between the C and the Go runtimes. The Go SDK takes care of satisfying all the plugin framework requirements without having to deal with the low-level details, by also optimizing the most critical code paths.&lt;/p&gt;
&lt;p&gt;The SDK allows developers to choose either from a low-level set of abstractions, or from a more high-level set of packages designed for simplicity and ease of use. The best way to approach the Go SDK is to start by importing a few high-level packages, which is enough to satisfy the majority of use cases.&lt;/p&gt;
&lt;p&gt;This section documents the Go SDK at a high-level, please refer to the &lt;a href="https://github.com/falcosecurity/plugin-sdk-go"&gt;official Go SDK documentation&lt;/a&gt; for deeper details.&lt;/p&gt;
&lt;h3 id="architecture-of-the-go-sdk"&gt;Architecture of the Go SDK&lt;/h3&gt;
&lt;p&gt;Since Falcosecurity plugins run in a C runtime, the Go SDK has been designed to abstract most of the complexity related to writing C-compliant code acceptable by the plugin framework, so that developers can focus on writing Go code only.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://v0-43--falcosecurity.netlify.app/docs/images/plugin_sdk_go_architecture.png" alt="plugin_sdk_go_architecture" loading="lazy" /&gt;
&lt;/p&gt;
&lt;p&gt;At a high level, the SDK is on top of three fundamental packages with different levels of abstractions:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Package &lt;code&gt;sdk&lt;/code&gt; is a container for all the basic types, definitions, and helpers that are reused across all the SDK parts.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Package &lt;code&gt;sdk/symbols&lt;/code&gt; contains prebuilt implementations for all the C symbols that plugins must export to be accepted by the framework. The prebuilt C symbols are divided in many subpackages, so that each of them can be imported individually to opt-in/opt-out each symbol.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Package &lt;code&gt;sdk/plugins&lt;/code&gt; provide high-level definition and base types for implementing plugin capabilities. This uses &lt;code&gt;sdk/symbols&lt;/code&gt; internally and takes care of importing all the prebuilt C symbols required each plugin capability respectively. This is the main entrypoint for developers to write plugins in Go.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Two additional packages &lt;code&gt;ptr&lt;/code&gt; and &lt;code&gt;cgo&lt;/code&gt; are used internally to simplify and optimize the state management and the usage of C-allocated memory pointers.&lt;/p&gt;
&lt;p&gt;For some use cases, developers can consider using the SDK layers selectively. This is meaningful only if developers wish to manually write part of the low-level C details of the framework in their plugins, but still want to use some parts of the SDK. However, this is discouraged if not for advanced use cases only. Developers are encouraged to use the &lt;code&gt;sdk/plugins&lt;/code&gt; to build Falcosecurity plugins, which is easier to use and will have less frequent breaking changes.&lt;/p&gt;
&lt;p&gt;Further details can be found in the documentation of each package: &lt;a href="https://pkg.go.dev/github.com/falcosecurity/plugin-sdk-go/pkg/sdk"&gt;&lt;code&gt;sdk&lt;/code&gt;&lt;/a&gt;, &lt;a href="https://pkg.go.dev/github.com/falcosecurity/plugin-sdk-go/pkg/sdk/symbols"&gt;&lt;code&gt;sdk/symbols&lt;/code&gt;&lt;/a&gt;, and &lt;a href="https://pkg.go.dev/github.com/falcosecurity/plugin-sdk-go/pkg/sdk/plugins"&gt;&lt;code&gt;sdk/plugins&lt;/code&gt;&lt;/a&gt;.&lt;/p&gt;
&lt;h3 id="getting-started"&gt;Getting Started&lt;/h3&gt;
&lt;p&gt;The SDK is built on top of a set of minimal composable interfaces describing the behavior of plugins and plugin instances. As such, developing plugins is as easy as defining a struct type representing the plugin itself, ensuring that the mandatory interface methods are defined on it, and then registering it to the SDK.&lt;/p&gt;
&lt;p&gt;To use the Go SDK, all you need to import are the &lt;code&gt;sdk&lt;/code&gt; and &lt;code&gt;sdk/plugins&lt;/code&gt; packages. The first contains all the core types and definitions used across the rest of the SDK packages, whereas the latter contains built-in constructs to develop plugins. The subpackages &lt;code&gt;sdk/plugins/source&lt;/code&gt; and &lt;code&gt;sdk/plugins/extractor&lt;/code&gt; contain specialized definitions for the event sourcing and the field extraction capabilities respectively.&lt;/p&gt;
&lt;p&gt;The &lt;code&gt;dummy&lt;/code&gt; plugin, documented in the &lt;a href="https://v0-43--falcosecurity.netlify.app/docs/reference/plugins/go-sdk-walkthrough/#example-go-plugin-dummy"&gt;next sections&lt;/a&gt;, is a simple example that helps understand how to start writing Go plugins with this SDK. The SDK also provides a set of &lt;a href="https://github.com/falcosecurity/plugin-sdk-go/tree/main/examples"&gt;base examples&lt;/a&gt; to get you started with plugin development.&lt;/p&gt;
&lt;h3 id="defining-a-plugin-with-field-extraction-capability"&gt;Defining a Plugin with Field Extraction Capability&lt;/h3&gt;
&lt;p&gt;In the Go SDK, a plugin with field extraction capability is a type implementing the following interface:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-go" data-lang="go"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#080;font-style:italic"&gt;// sdk/plugins/extractor&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;type&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;Plugin&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;interface&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;{&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#666"&gt;...&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#00a000"&gt;Info&lt;/span&gt;()&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#666"&gt;*&lt;/span&gt;sdk.Info&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#00a000"&gt;Init&lt;/span&gt;(config&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#0b0;font-weight:bold"&gt;string&lt;/span&gt;)&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#0b0;font-weight:bold"&gt;error&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#00a000"&gt;Fields&lt;/span&gt;()&lt;span style="color:#bbb"&gt; &lt;/span&gt;[]sdk.FieldEntry&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#00a000"&gt;Extract&lt;/span&gt;(req&lt;span style="color:#bbb"&gt; &lt;/span&gt;sdk.ExtractRequest,&lt;span style="color:#bbb"&gt; &lt;/span&gt;evt&lt;span style="color:#bbb"&gt; &lt;/span&gt;sdk.EventReader)&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#0b0;font-weight:bold"&gt;error&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;code&gt;Info()&lt;/code&gt; returns all the info about the plugin. The returned &lt;code&gt;plugins.Info&lt;/code&gt; struct should be filled in by the plugin author and contains fields such as the plugin ID, name, description, etc.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Init()&lt;/code&gt; method is called to initialize a plugin when the framework allocates it. A user-defined configuration string is passed by the framework. This is where the plugin can initialize its internal state and acquire all the resources it needs.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Fields()&lt;/code&gt; returns an array of &lt;code&gt;sdk.FieldEntry&lt;/code&gt; representing all the fields supported by a plugin for extraction. The order of the fields is relevant, as their index is used as an identifier during extraction.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Extract()&lt;/code&gt; extracts the value of one of the supported fields from a given event passed in by the framework. The &lt;code&gt;sdk.ExtractRequest&lt;/code&gt; argument should be used to set the extracted value.&lt;/p&gt;
&lt;h4 id="optional-interfaces"&gt;Optional Interfaces&lt;/h4&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-go" data-lang="go"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;type&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;Destroyer&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;interface&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;{&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#00a000"&gt;Destroy&lt;/span&gt;()&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;type&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;InitSchema&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;interface&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;{&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#00a000"&gt;InitSchema&lt;/span&gt;()&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#666"&gt;*&lt;/span&gt;SchemaInfo&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Plugins with field extraction capability can optionally implement the &lt;code&gt;sdk.Destroyer&lt;/code&gt; interface. In that case, &lt;code&gt;Destroy()&lt;/code&gt; will be called when the plugin gets destroyed and can be used to release any allocated resource. they can also also optionally implement the &lt;code&gt;sdk.InitSchema&lt;/code&gt; interface. In that case, &lt;code&gt;InitSchema()&lt;/code&gt; will be used to to return a schema describing the data expected to be passed as a configuration during the plugin initialization. This follows the semantics documented for &lt;a href="https://v0-43--falcosecurity.netlify.app/docs/reference/plugins/plugin-api-reference/#get-init-schema"&gt;&lt;code&gt;get_init_schema&lt;/code&gt;&lt;/a&gt;. Currently, the schema must follow the &lt;a href="https://json-schema.org/"&gt;JSON Schema specific&lt;/a&gt;, which in Go can also be easily auto-generated with external packages (e.g. &lt;a href="https:/github.com/alecthomas/jsonschema"&gt;alecthomas/jsonschema&lt;/a&gt;).&lt;/p&gt;
&lt;h3 id="defining-a-plugin-with-event-sourcing-capability"&gt;Defining a Plugin with Event Sourcing Capability&lt;/h3&gt;
&lt;p&gt;In the Go SDK, a plugin with event sourcing capability must specify two types, one of the plugin itself and one for the plugin instances, implementing the following interfaces respectively:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-go" data-lang="go"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#080;font-style:italic"&gt;// sdk/plugins/source&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;type&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;Plugin&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;interface&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;{&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#666"&gt;...&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#00a000"&gt;Info&lt;/span&gt;()&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#666"&gt;*&lt;/span&gt;sdk.Info&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#00a000"&gt;Init&lt;/span&gt;(config&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#0b0;font-weight:bold"&gt;string&lt;/span&gt;)&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#0b0;font-weight:bold"&gt;error&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#00a000"&gt;Open&lt;/span&gt;(params&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#0b0;font-weight:bold"&gt;string&lt;/span&gt;)&lt;span style="color:#bbb"&gt; &lt;/span&gt;(Instance,&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#0b0;font-weight:bold"&gt;error&lt;/span&gt;)&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#080;font-style:italic"&gt;// sdk/plugins/source&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;type&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;Instance&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;interface&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;{&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#666"&gt;...&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#00a000"&gt;NextBatch&lt;/span&gt;(pState&lt;span style="color:#bbb"&gt; &lt;/span&gt;PluginState,&lt;span style="color:#bbb"&gt; &lt;/span&gt;evts&lt;span style="color:#bbb"&gt; &lt;/span&gt;EventWriters)&lt;span style="color:#bbb"&gt; &lt;/span&gt;(&lt;span style="color:#0b0;font-weight:bold"&gt;int&lt;/span&gt;,&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#0b0;font-weight:bold"&gt;error&lt;/span&gt;)&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The &lt;code&gt;source.Plugin&lt;/code&gt; interface has many functions in common with &lt;code&gt;extractor.Plugin&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Open()&lt;/code&gt; creates a new plugin instance to open a new stream of events. The framework provides the user-defined open parameters to customize the event source. The return value must implement the &lt;code&gt;source.Instance&lt;/code&gt; interface, and its lifecycle ends when the event stream is closed.&lt;/p&gt;
&lt;p&gt;The &lt;code&gt;source.Instance&lt;/code&gt; interface represents plugin instances for an opened event stream, and has one mandatory method and a few optional ones.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;NextBatch&lt;/code&gt; creates a new batch of events to be pushed in the event stream. The SDK provides a pre-allocated batch to write events into, in order to manage the used memory optimally.&lt;/p&gt;
&lt;h4 id="optional-interfaces-1"&gt;Optional Interfaces&lt;/h4&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-go" data-lang="go"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;type&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;Destroyer&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;interface&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;{&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#00a000"&gt;Destroy&lt;/span&gt;()&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;type&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;Closer&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;interface&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;{&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#00a000"&gt;Close&lt;/span&gt;()&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;type&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;InitSchema&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;interface&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;{&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#00a000"&gt;InitSchema&lt;/span&gt;()&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#666"&gt;*&lt;/span&gt;SchemaInfo&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;type&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;OpenParams&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;interface&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;{&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#00a000"&gt;OpenParams&lt;/span&gt;()&lt;span style="color:#bbb"&gt; &lt;/span&gt;([]OpenParam,&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#0b0;font-weight:bold"&gt;error&lt;/span&gt;)&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;type&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;Progresser&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;interface&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;{&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#00a000"&gt;Progress&lt;/span&gt;(pState&lt;span style="color:#bbb"&gt; &lt;/span&gt;sdk.PluginState)&lt;span style="color:#bbb"&gt; &lt;/span&gt;(&lt;span style="color:#0b0;font-weight:bold"&gt;float64&lt;/span&gt;,&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#0b0;font-weight:bold"&gt;string&lt;/span&gt;)&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;type&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;Stringer&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;interface&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;{&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#00a000"&gt;String&lt;/span&gt;(evt&lt;span style="color:#bbb"&gt; &lt;/span&gt;sdk.EventReader)&lt;span style="color:#bbb"&gt; &lt;/span&gt;(&lt;span style="color:#0b0;font-weight:bold"&gt;string&lt;/span&gt;,&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#0b0;font-weight:bold"&gt;error&lt;/span&gt;)&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Plugins with event sourcing capabilities can optionally implement the &lt;code&gt;sdk.Destroyer&lt;/code&gt; and &lt;code&gt;sdk.InitSchema&lt;/code&gt; interfaces, just like mentioned in the section above.&lt;/p&gt;
&lt;p&gt;Additionally, they can also implement the &lt;code&gt;sdk.OpenParams&lt;/code&gt; interface. If requested by the application, the framework may call &lt;code&gt;OpenParams()&lt;/code&gt; before opening the event stream to obtains some suggested values that would valid parameters for &lt;code&gt;Open()&lt;/code&gt;. For more details, see the documentation of &lt;a href="https://v0-43--falcosecurity.netlify.app/docs/reference/plugins/plugin-api-reference/#list-open-params"&gt;&lt;code&gt;list_open_params&lt;/code&gt;&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Plugin instances can optionally implement the &lt;code&gt;sdk.Closer&lt;/code&gt;, &lt;code&gt;sdk.Progresser&lt;/code&gt;, and &lt;code&gt;sdk.Stringer&lt;/code&gt; interfaces. If &lt;code&gt;sdk.Closer&lt;/code&gt; is implemented, the &lt;code&gt;Close()&lt;/code&gt; method is called while closing the event stream and can be used to release the resources used by the plugin instance. If &lt;code&gt;sdk.Progresser&lt;/code&gt; is implemented, the &lt;code&gt;Progress()&lt;/code&gt; method is called by the SDK when the framework requests progress data about the event stream of the plugin instance. &lt;code&gt;Progress()&lt;/code&gt; must return a &lt;code&gt;float64&lt;/code&gt; with a value between 0 and 1 representing the current progress percentage, and a string representation of the same progress value. If &lt;code&gt;sdk.Stringer&lt;/code&gt; is implemented, the &lt;code&gt;String()&lt;/code&gt; method must return a string representation of an event created by the plugin, which is used by the framework as an extraction value of the &lt;code&gt;evt.plugininfo&lt;/code&gt; field. The string representation should be on a single line and contain important information about the event.&lt;/p&gt;
&lt;h4 id="best-practices-and-go-sdk-prebuilts-for-source-instances"&gt;Best Practices and Go SDK Prebuilts for Source Instances&lt;/h4&gt;
&lt;p&gt;Although the Go SDK gives developers high control and flexibility, in the general case implementing the &lt;code&gt;sdk.NextBatcher&lt;/code&gt; interface is not trivial. Custom definitions of &lt;code&gt;source.Instance&lt;/code&gt; require developers to be mindful of the following while implementing the &lt;code&gt;NextBatch()&lt;/code&gt; function:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;It should return as fast as possible and should try to fill-up event batch up to its maximum capacity&lt;/li&gt;
&lt;li&gt;Listen for a timeout of few milliseconds and return the batch in its current state once the timeout is expired&lt;/li&gt;
&lt;li&gt;Conceive the case in which &lt;code&gt;Close()&lt;/code&gt; is called before &lt;code&gt;NextBatch()&lt;/code&gt; has returned. This can potentially happen if the plugin framework receives signals such as SIGINT or SIGTERM&lt;/li&gt;
&lt;li&gt;Minimize the number of memory allocations&lt;/li&gt;
&lt;li&gt;Keep returning &lt;code&gt;sdk.ErrEOF&lt;/code&gt; after returning it the first time&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Considering the above, the SDK provides prebuilt implementations of &lt;code&gt;source.Instance&lt;/code&gt; that satisfy a broad range of use cases, so that developers need to define their own type only if they have advanced or custom requirements.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-go" data-lang="go"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#080;font-style:italic"&gt;// sdk/plugins/source&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;func&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#00a000"&gt;NewPullInstance&lt;/span&gt;(pull&lt;span style="color:#bbb"&gt; &lt;/span&gt;source.PullFunc,&lt;span style="color:#bbb"&gt; &lt;/span&gt;options&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#666"&gt;...&lt;/span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;func&lt;/span&gt;(&lt;span style="color:#666"&gt;*&lt;/span&gt;&amp;lt;unexported&lt;span style="color:#666"&gt;-&lt;/span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;type&lt;/span&gt;&amp;gt;))&lt;span style="color:#bbb"&gt; &lt;/span&gt;(source.Instance,&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#0b0;font-weight:bold"&gt;error&lt;/span&gt;)&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;func&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#00a000"&gt;NewPushInstance&lt;/span&gt;(evtC&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#666"&gt;&amp;lt;-&lt;/span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;chan&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;source.PushEvent,&lt;span style="color:#bbb"&gt; &lt;/span&gt;options&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#666"&gt;...&lt;/span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;func&lt;/span&gt;(&lt;span style="color:#666"&gt;*&lt;/span&gt;&amp;lt;unexported&lt;span style="color:#666"&gt;-&lt;/span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;type&lt;/span&gt;&amp;gt;))&lt;span style="color:#bbb"&gt; &lt;/span&gt;(source.Instance,&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#0b0;font-weight:bold"&gt;error&lt;/span&gt;)&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;code&gt;source.NewPullInstance&lt;/code&gt; and &lt;code&gt;source.NewPushInstance&lt;/code&gt; are two constructors for SDK-provided &lt;code&gt;source.Instance&lt;/code&gt; implementations that cover the following use cases:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Pull Model&lt;/strong&gt;: for when the event source can be implemented sequentially and the time required to generate a sequence of event is deterministic. This is implemented with a functional design, where the passed-in callback is expected to be non-suspensive and to return quickly&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Push Model&lt;/strong&gt;: for when the event source can be suspensive and there is no time guarantee regarding when an event gets produced. For instance, this applies for all event sources that generate events from webhook events. Given the event-driven nature of this use case, this is implemented by passing event data in the form of byte slices through a channel&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The prebuilt &lt;code&gt;source.Instance&lt;/code&gt;s can be configured in the function constructors by using the Go &lt;em&gt;options pattern&lt;/em&gt;. The SDK provides options for configuring and overriding all the default values:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-go" data-lang="go"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#080;font-style:italic"&gt;// sdk/plugins/source&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;func&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#00a000"&gt;WithInstanceContext&lt;/span&gt;(ctx&lt;span style="color:#bbb"&gt; &lt;/span&gt;context.Context)&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;func&lt;/span&gt;(&lt;span style="color:#666"&gt;*&lt;/span&gt;&amp;lt;unexported&lt;span style="color:#666"&gt;-&lt;/span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;type&lt;/span&gt;&amp;gt;)&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;func&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#00a000"&gt;WithInstanceTimeout&lt;/span&gt;(timeout&lt;span style="color:#bbb"&gt; &lt;/span&gt;time.Duration)&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;func&lt;/span&gt;(&lt;span style="color:#666"&gt;*&lt;/span&gt;&amp;lt;unexported&lt;span style="color:#666"&gt;-&lt;/span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;type&lt;/span&gt;&amp;gt;)&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;func&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#00a000"&gt;WithInstanceClose&lt;/span&gt;(close&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;func&lt;/span&gt;())&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;func&lt;/span&gt;(&lt;span style="color:#666"&gt;*&lt;/span&gt;&amp;lt;unexported&lt;span style="color:#666"&gt;-&lt;/span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;type&lt;/span&gt;&amp;gt;)&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;func&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#00a000"&gt;WithInstanceBatchSize&lt;/span&gt;(size&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#0b0;font-weight:bold"&gt;uint32&lt;/span&gt;)&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;func&lt;/span&gt;(&lt;span style="color:#666"&gt;*&lt;/span&gt;&amp;lt;unexported&lt;span style="color:#666"&gt;-&lt;/span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;type&lt;/span&gt;&amp;gt;)&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;func&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#00a000"&gt;WithInstanceEventSize&lt;/span&gt;(size&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#0b0;font-weight:bold"&gt;uint32&lt;/span&gt;)&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;func&lt;/span&gt;(&lt;span style="color:#666"&gt;*&lt;/span&gt;&amp;lt;unexported&lt;span style="color:#666"&gt;-&lt;/span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;type&lt;/span&gt;&amp;gt;)&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;func&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#00a000"&gt;WithInstanceProgress&lt;/span&gt;(progress&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;func&lt;/span&gt;()&lt;span style="color:#bbb"&gt; &lt;/span&gt;(&lt;span style="color:#0b0;font-weight:bold"&gt;float64&lt;/span&gt;,&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#0b0;font-weight:bold"&gt;string&lt;/span&gt;))&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;func&lt;/span&gt;(&lt;span style="color:#666"&gt;*&lt;/span&gt;&amp;lt;unexported&lt;span style="color:#666"&gt;-&lt;/span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;type&lt;/span&gt;&amp;gt;)&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Here's an example of how the &lt;em&gt;Pull Model&lt;/em&gt; prebuilt can be used to implement an event source:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-go" data-lang="go"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;func&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;(m&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#666"&gt;*&lt;/span&gt;MyPlugin)&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#00a000"&gt;Open&lt;/span&gt;(params&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#0b0;font-weight:bold"&gt;string&lt;/span&gt;)&lt;span style="color:#bbb"&gt; &lt;/span&gt;(source.Instance,&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#0b0;font-weight:bold"&gt;error&lt;/span&gt;)&lt;span style="color:#bbb"&gt; &lt;/span&gt;{&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;counter&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#666"&gt;:=&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#a2f"&gt;uint64&lt;/span&gt;(&lt;span style="color:#666"&gt;0&lt;/span&gt;)&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;pull&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#666"&gt;:=&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;func&lt;/span&gt;(ctx&lt;span style="color:#bbb"&gt; &lt;/span&gt;context.Context,&lt;span style="color:#bbb"&gt; &lt;/span&gt;evt&lt;span style="color:#bbb"&gt; &lt;/span&gt;sdk.EventWriter)&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#0b0;font-weight:bold"&gt;error&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;{&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;counter&lt;span style="color:#666"&gt;++&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;if&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;err&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#666"&gt;:=&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;gob.&lt;span style="color:#00a000"&gt;NewEncoder&lt;/span&gt;(evt.&lt;span style="color:#00a000"&gt;Writer&lt;/span&gt;()).&lt;span style="color:#00a000"&gt;Encode&lt;/span&gt;(counter);&lt;span style="color:#bbb"&gt; &lt;/span&gt;err&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#666"&gt;!=&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;nil&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;{&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;return&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;err&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;}&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;evt.&lt;span style="color:#00a000"&gt;SetTimestamp&lt;/span&gt;(&lt;span style="color:#a2f"&gt;uint64&lt;/span&gt;(time.&lt;span style="color:#00a000"&gt;Now&lt;/span&gt;().&lt;span style="color:#00a000"&gt;UnixNano&lt;/span&gt;()))&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;return&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;nil&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;}&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;return&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;source.&lt;span style="color:#00a000"&gt;NewPullInstance&lt;/span&gt;(pull)&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="registering-a-plugin-in-the-sdk"&gt;Registering a Plugin in the SDK&lt;/h3&gt;
&lt;p&gt;After defining proper types for the plugin, the only thing remaining is to register it in the SDK so that it can be used in the plugin framework.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-go" data-lang="go"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#080;font-style:italic"&gt;// sdk/plugins&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;type&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;FactoryFunc&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;func&lt;/span&gt;()&lt;span style="color:#bbb"&gt; &lt;/span&gt;plugins.Plugin&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#080;font-style:italic"&gt;// sdk/plugins&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;func&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#00a000"&gt;SetFactory&lt;/span&gt;(plugins.FactoryFunc)&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#080;font-style:italic"&gt;// sdk/plugins/extractor&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;func&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#00a000"&gt;Register&lt;/span&gt;(extractor.Plugin)&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#080;font-style:italic"&gt;// sdk/plugins/source&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;func&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#00a000"&gt;Register&lt;/span&gt;(source.Plugin)&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The newly created plugin type need to be registered to the SDK in a Go &lt;code&gt;init&lt;/code&gt; function and through the &lt;code&gt;plugins.SetFactory()&lt;/code&gt; function. &lt;code&gt;plugins.FactoryFunc&lt;/code&gt; is a function type that is used by the SDK to create plugins when requested by the plugin framework. Then, the &lt;code&gt;source.Register()&lt;/code&gt; and &lt;code&gt;extractor.Register()&lt;/code&gt; functions should be invoked inside the body of &lt;code&gt;plugins.FactoryFunc&lt;/code&gt; functions to implement the event sourcing and the field extraction capabilities respectively.&lt;/p&gt;
&lt;p&gt;The defined plugin types are expected to implement a given set of methods. Compilation will fail at the &lt;code&gt;Register()&lt;/code&gt; functions if any of the required methods is not defined. Developers are encouraged to compose their structs with &lt;code&gt;plugins.BasePlugin&lt;/code&gt;, and &lt;code&gt;source.BaseInstance&lt;/code&gt;, which provide prebuilt boilerplate for many of those methods. In this way, developers just need to focus on implementing the few plugin-specific methods remaining.&lt;/p&gt;
&lt;p&gt;Besides the interface requirements, the defined types can contain arbitrary fields and methods. State variable that must be maintained during the plugin lifecycle (or in the lifecycle of an opened event stream) must be contained in the defined types. In this way, the SDK can guarantee that the state variables are not disposed by the garbage collector.&lt;/p&gt;
&lt;h3 id="interacting-with-events"&gt;Interacting with Events&lt;/h3&gt;
&lt;p&gt;Generating new events, and extracting field values from them, are the hottest path in the plugin framework and can happen at a very high rate. For this reason, the Go SDK optimizes the memory usage as much as possible, avoiding reallocations and copies wherever possible. Internally, this sometimes means reading and writing on C-allocated memory from Go code directly, which is efficient but also very unsafe and can lead to unstable code.&lt;/p&gt;
&lt;p&gt;As such, the SDK provides the two &lt;code&gt;sdk.EventReader&lt;/code&gt; and &lt;code&gt;sdk.EventWriter&lt;/code&gt; interfaces, which enable developers to safely read and write from events while still fully leveraging the underlying memory optimizations. &lt;code&gt;sdk.EventReader&lt;/code&gt; gives a read-only view of an event, with accessor methods for all the internal fields, and &lt;code&gt;sdk.EventWriter&lt;/code&gt; does the same in read-only mode.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-go" data-lang="go"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;type&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;EventReader&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;interface&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;{&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#00a000"&gt;EventNum&lt;/span&gt;()&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#0b0;font-weight:bold"&gt;uint64&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#00a000"&gt;Timestamp&lt;/span&gt;()&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#0b0;font-weight:bold"&gt;uint64&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#00a000"&gt;Reader&lt;/span&gt;()&lt;span style="color:#bbb"&gt; &lt;/span&gt;io.ReadSeeker&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;type&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;EventWriter&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;interface&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;{&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#00a000"&gt;SetTimestamp&lt;/span&gt;(value&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#0b0;font-weight:bold"&gt;uint64&lt;/span&gt;)&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#00a000"&gt;Writer&lt;/span&gt;()&lt;span style="color:#bbb"&gt; &lt;/span&gt;io.Writer&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Event data can either be read or written through the standard &lt;code&gt;io.SeekReader&lt;/code&gt; and &lt;code&gt;io.Writer&lt;/code&gt; interfaces, returned by the &lt;code&gt;Reader()&lt;/code&gt; and &lt;code&gt;Writer()&lt;/code&gt; methods respectively. The SDK hides behind these interfaces all the safety and optimization mechanisms.&lt;/p&gt;
&lt;p&gt;For plugins with event sourcing capability, a reusable batch of &lt;code&gt;sdk.EventWriter&lt;/code&gt;s is automatically allocated in each plugin source instance after the &lt;code&gt;Open()&lt;/code&gt; method returns. This slab-allocator creates reusable event data by using the default &lt;code&gt;sdk.DefaultBatchSize&lt;/code&gt; and &lt;code&gt;sdk.DefaultEvtSize&lt;/code&gt; constants. Developers can override the automatic allocation to define batches of arbitrary sizes in the &lt;code&gt;Open()&lt;/code&gt; method, by calling the &lt;code&gt;SetEvents()&lt;/code&gt; method on the newly opened plugin instance before returning it. The reusable event batch can be created with the &lt;code&gt;sdk.NewEventWriters&lt;/code&gt; function, that takes the event data size and batch size as arguments.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-go" data-lang="go"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;func&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#00a000"&gt;NewEventWriters&lt;/span&gt;(size,&lt;span style="color:#bbb"&gt; &lt;/span&gt;dataSize&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#0b0;font-weight:bold"&gt;int64&lt;/span&gt;)&lt;span style="color:#bbb"&gt; &lt;/span&gt;(EventWriters,&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#0b0;font-weight:bold"&gt;error&lt;/span&gt;)&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Note that the size of the reusable event batch defines the maximum size of each event batch created by the plugin in &lt;code&gt;NextBatch&lt;/code&gt;.&lt;/p&gt;
&lt;h3 id="compiling-plugins"&gt;Compiling Plugins&lt;/h3&gt;
&lt;p&gt;After successfully writing a plugin, all you need is to compile it. Go allows compiling binaries as a C-compliant shared library with the &lt;code&gt;-buildmode=c-shared&lt;/code&gt; flag. The build command will be something looking like:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;go build -buildmode=c-shared -o &amp;lt;outname&amp;gt;.so *.go
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;The SDK takes care of generating all the required C exported functions that the plugin framework needs to load the plugin. Once built, your plugin is ready to be used in the Falcosecurity plugin system.&lt;/p&gt;
&lt;h2 id="example-go-plugin-dummy"&gt;Example Go Plugin: &lt;code&gt;dummy&lt;/code&gt;&lt;/h2&gt;
&lt;p&gt;This section walks through the implementation of the &lt;code&gt;dummy&lt;/code&gt;. This plugin returns events that are just a number value that increases with each event generated. Each increase is 1 plus a random &amp;quot;jitter&amp;quot; value that ranges from [0:jitter]. The jitter value is provided as configuration to the plugin in &lt;code&gt;plugin_init&lt;/code&gt;. The starting value and the maximum number of events are provided as open parameters to the plugin in &lt;code&gt;plugin_open&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;This will show how the above API functions are actually used in a functional plugin. The source code for this plugin can be found at &lt;a href="https://github.com/falcosecurity/plugins/blob/master/plugins/dummy/plugin/dummy.go"&gt;dummy.go&lt;/a&gt;.&lt;/p&gt;
&lt;h3 id="initial-imports"&gt;Initial Imports&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-go" data-lang="go"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;package&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;main&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;import&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;(&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#666"&gt;...&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#b44"&gt;&amp;#34;github.com/falcosecurity/plugin-sdk-go/pkg/sdk&amp;#34;&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#b44"&gt;&amp;#34;github.com/falcosecurity/plugin-sdk-go/pkg/sdk/plugins&amp;#34;&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#b44"&gt;&amp;#34;github.com/falcosecurity/plugin-sdk-go/pkg/sdk/plugins/extractor&amp;#34;&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#b44"&gt;&amp;#34;github.com/falcosecurity/plugin-sdk-go/pkg/sdk/plugins/source&amp;#34;&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;)&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Importing the &lt;code&gt;sdk&lt;/code&gt; and &lt;code&gt;sdk/plugins&lt;/code&gt; packages is the first step for developing a Falcosecurity plugin in Go. The &lt;code&gt;sdk&lt;/code&gt; package contains all the core types and definitions used across the other packages of the SDK. The &lt;code&gt;sdk/plugins&lt;/code&gt; package contains prebuilt constructs for defining new plugins.&lt;/p&gt;
&lt;p&gt;The &lt;code&gt;sdk/plugins/source&lt;/code&gt; and &lt;code&gt;sdk/plugins/extractor&lt;/code&gt; packages are required to register the event sourcing and field extraction capabilities. &lt;code&gt;dummy&lt;/code&gt; implements both of them.&lt;/p&gt;
&lt;p&gt;The Go module &lt;code&gt;falcosecurity/plugin-sdk-go&lt;/code&gt; has its own &lt;a href="https://pkg.go.dev/github.com/falcosecurity/plugin-sdk-go"&gt;documentation&lt;/a&gt;, which gives deeper insights about the internal architecture of the SDK.&lt;/p&gt;
&lt;h3 id="defining-the-plugin"&gt;Defining the Plugin&lt;/h3&gt;
&lt;p&gt;In the Go SDK, plugins are defined by a set of composable tiny interfaces. To define a new plugin, the first step is to define a new &lt;code&gt;struct&lt;/code&gt; type representing the plugin itself, and then register it to the SDK. Plugins with event sourcing capability, like &lt;code&gt;dummy&lt;/code&gt;, must define an additional type representing the opened instance of the plugin event stream.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-go" data-lang="go"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;type&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;PluginConfig&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;struct&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;{&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#080;font-style:italic"&gt;// This reflects potential internal state for the plugin. In&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#080;font-style:italic"&gt;// this case, the plugin is configured with a jitter.&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;Jitter&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#0b0;font-weight:bold"&gt;uint64&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#b44"&gt;`json:&amp;#34;jitter&amp;#34; jsonschema:&amp;#34;description=A random amount added to the sample of each event (Default: 10)&amp;#34;`&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;type&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;Plugin&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;struct&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;{&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;plugins.BasePlugin&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#080;font-style:italic"&gt;// Will be used to randomize samples&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;rand&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#666"&gt;*&lt;/span&gt;rand.Rand&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#080;font-style:italic"&gt;// Contains the init configuration values&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;config&lt;span style="color:#bbb"&gt; &lt;/span&gt;PluginConfig&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;type&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;PluginInstance&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;struct&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;{&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;source.BaseInstance&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#080;font-style:italic"&gt;// Copy of the init params from plugin_open()&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;initParams&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#0b0;font-weight:bold"&gt;string&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#080;font-style:italic"&gt;// The number of events to return before EOF&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;maxEvents&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#0b0;font-weight:bold"&gt;uint64&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#080;font-style:italic"&gt;// A count of events returned. Used to count against maxEvents.&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;counter&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#0b0;font-weight:bold"&gt;uint64&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#080;font-style:italic"&gt;// A semi-random numeric value, derived from this value and&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#080;font-style:italic"&gt;// jitter. This is put in every event as the data property.&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;sample&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#0b0;font-weight:bold"&gt;uint64&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;func&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#00a000"&gt;init&lt;/span&gt;()&lt;span style="color:#bbb"&gt; &lt;/span&gt;{&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;plugins.&lt;span style="color:#00a000"&gt;SetFactory&lt;/span&gt;(&lt;span style="color:#a2f;font-weight:bold"&gt;func&lt;/span&gt;()&lt;span style="color:#bbb"&gt; &lt;/span&gt;plugins.Plugin&lt;span style="color:#bbb"&gt; &lt;/span&gt;{&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;p&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#666"&gt;:=&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#666"&gt;&amp;amp;&lt;/span&gt;Plugin{}&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;source.&lt;span style="color:#00a000"&gt;Register&lt;/span&gt;(p)&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;extractor.&lt;span style="color:#00a000"&gt;Register&lt;/span&gt;(p)&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;return&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;p&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;})&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="plugin-info"&gt;Plugin Info&lt;/h3&gt;
&lt;p&gt;An &lt;code&gt;Info()&lt;/code&gt; method is needed to return a data struct containing all the plugin info. &lt;code&gt;Info()&lt;/code&gt; is a required method for the defined plugin struct type. This plugin defined its info as a set of constants for simplicity, but it's not a requirement.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-go" data-lang="go"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;const&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;(&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;PluginID&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#0b0;font-weight:bold"&gt;uint32&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;=&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#666"&gt;3&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;PluginName&lt;span style="color:#bbb"&gt; &lt;/span&gt;=&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#b44"&gt;&amp;#34;dummy&amp;#34;&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;PluginDescription&lt;span style="color:#bbb"&gt; &lt;/span&gt;=&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#b44"&gt;&amp;#34;Reference plugin for educational purposes&amp;#34;&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;PluginContact&lt;span style="color:#bbb"&gt; &lt;/span&gt;=&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#b44"&gt;&amp;#34;github.com/falcosecurity/plugins&amp;#34;&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;PluginVersion&lt;span style="color:#bbb"&gt; &lt;/span&gt;=&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#b44"&gt;&amp;#34;0.4.0&amp;#34;&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;PluginEventSource&lt;span style="color:#bbb"&gt; &lt;/span&gt;=&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#b44"&gt;&amp;#34;dummy&amp;#34;&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;)&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#666"&gt;...&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;func&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;(m&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#666"&gt;*&lt;/span&gt;Plugin)&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#00a000"&gt;Info&lt;/span&gt;()&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#666"&gt;*&lt;/span&gt;plugins.Info&lt;span style="color:#bbb"&gt; &lt;/span&gt;{&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;return&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#666"&gt;&amp;amp;&lt;/span&gt;plugins.Info{&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;ID:&lt;span style="color:#bbb"&gt; &lt;/span&gt;PluginID,&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;Name:&lt;span style="color:#bbb"&gt; &lt;/span&gt;PluginName,&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;Description:&lt;span style="color:#bbb"&gt; &lt;/span&gt;PluginDescription,&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;Contact:&lt;span style="color:#bbb"&gt; &lt;/span&gt;PluginContact,&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;Version:&lt;span style="color:#bbb"&gt; &lt;/span&gt;PluginVersion,&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;RequiredAPIVersion:&lt;span style="color:#bbb"&gt; &lt;/span&gt;PluginRequiredApiVersion,&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;EventSource:&lt;span style="color:#bbb"&gt; &lt;/span&gt;PluginEventSource,&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;}&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#666"&gt;...&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="initializing-destroying-the-plugin"&gt;Initializing/Destroying the Plugin&lt;/h3&gt;
&lt;p&gt;The mandatory &lt;code&gt;Init()&lt;/code&gt; method serves as an initialization entrypoint for plugins. This is where the user-defined configuration string is passed in by the framework. The internal state of the plugin should be initialized at this level. An error can be returned to abort the plugin initialization.&lt;/p&gt;
&lt;p&gt;Defining the &lt;code&gt;Destroy()&lt;/code&gt; method is optional but can be useful if some resource needs to be released before the plugin gets destroyed. The &lt;code&gt;InitSchema()&lt;/code&gt; method is optional too, but it allows the framework to parse the init config automatically, thus avoiding the need of doing it manually inside &lt;code&gt;Init()&lt;/code&gt;.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-go" data-lang="go"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#080;font-style:italic"&gt;// Set the config default values.&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;func&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;(p&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#666"&gt;*&lt;/span&gt;PluginConfig)&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#00a000"&gt;setDefault&lt;/span&gt;()&lt;span style="color:#bbb"&gt; &lt;/span&gt;{&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;p.Jitter&lt;span style="color:#bbb"&gt; &lt;/span&gt;=&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#666"&gt;10&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#080;font-style:italic"&gt;// This returns a schema representing the configuration expected by the&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#080;font-style:italic"&gt;// plugin to be passed to the Init() method. Defining InitSchema() allows&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#080;font-style:italic"&gt;// the framework to automatically validate the configuration, so that the&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#080;font-style:italic"&gt;// plugin can assume that it to be always be well-formed when passed to Init().&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;func&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;(p&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#666"&gt;*&lt;/span&gt;Plugin)&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#00a000"&gt;InitSchema&lt;/span&gt;()&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#666"&gt;*&lt;/span&gt;sdk.SchemaInfo&lt;span style="color:#bbb"&gt; &lt;/span&gt;{&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#080;font-style:italic"&gt;// We leverage the jsonschema package to autogenerate the&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#080;font-style:italic"&gt;// JSON Schema definition using reflection from our config struct.&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;reflector&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#666"&gt;:=&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;jsonschema.Reflector{&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#080;font-style:italic"&gt;// all properties are optional by default&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;RequiredFromJSONSchemaTags:&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;true&lt;/span&gt;,&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#080;font-style:italic"&gt;// unrecognized properties don&amp;#39;t cause a parsing failures&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;AllowAdditionalProperties:&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;true&lt;/span&gt;,&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;}&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;if&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;schema,&lt;span style="color:#bbb"&gt; &lt;/span&gt;err&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#666"&gt;:=&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;reflector.&lt;span style="color:#00a000"&gt;Reflect&lt;/span&gt;(&lt;span style="color:#666"&gt;&amp;amp;&lt;/span&gt;PluginConfig{}).&lt;span style="color:#00a000"&gt;MarshalJSON&lt;/span&gt;();&lt;span style="color:#bbb"&gt; &lt;/span&gt;err&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#666"&gt;==&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;nil&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;{&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;return&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#666"&gt;&amp;amp;&lt;/span&gt;sdk.SchemaInfo{&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;Schema:&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#a2f"&gt;string&lt;/span&gt;(schema),&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;}&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;}&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;return&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;nil&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#080;font-style:italic"&gt;// Since this plugin defines the InitSchema() method, we can assume&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#080;font-style:italic"&gt;// that the configuration is pre-validated by the framework and&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#080;font-style:italic"&gt;// always well-formed according to the provided schema.&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;func&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;(m&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#666"&gt;*&lt;/span&gt;Plugin)&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#00a000"&gt;Init&lt;/span&gt;(cfg&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#0b0;font-weight:bold"&gt;string&lt;/span&gt;)&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#0b0;font-weight:bold"&gt;error&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;{&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#080;font-style:italic"&gt;// initialize state&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;m.rand&lt;span style="color:#bbb"&gt; &lt;/span&gt;=&lt;span style="color:#bbb"&gt; &lt;/span&gt;rand.&lt;span style="color:#00a000"&gt;New&lt;/span&gt;(rand.&lt;span style="color:#00a000"&gt;NewSource&lt;/span&gt;(time.&lt;span style="color:#00a000"&gt;Now&lt;/span&gt;().&lt;span style="color:#00a000"&gt;UnixNano&lt;/span&gt;()))&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#080;font-style:italic"&gt;// The format of cfg is a json object with a single param&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#080;font-style:italic"&gt;// &amp;#34;jitter&amp;#34;, e.g. {&amp;#34;jitter&amp;#34;: 10}&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#080;font-style:italic"&gt;// Empty configs are allowed, in which case the default is used.&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#080;font-style:italic"&gt;// Since we provide a schema through InitSchema(), the framework&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#080;font-style:italic"&gt;// guarantees that the config is always well-formed json.&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;m.config.&lt;span style="color:#00a000"&gt;setDefault&lt;/span&gt;()&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;json.&lt;span style="color:#00a000"&gt;Unmarshal&lt;/span&gt;([]&lt;span style="color:#a2f"&gt;byte&lt;/span&gt;(cfg),&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#666"&gt;&amp;amp;&lt;/span&gt;m.config)&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;return&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;nil&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;func&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;(m&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#666"&gt;*&lt;/span&gt;Plugin)&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#00a000"&gt;Destroy&lt;/span&gt;()&lt;span style="color:#bbb"&gt; &lt;/span&gt;{&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#080;font-style:italic"&gt;// nothing to do here&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="opening-closing-a-stream-of-events"&gt;Opening/Closing a Stream of Events&lt;/h3&gt;
&lt;p&gt;A plugin instance is created when the plugin event stream is opened, which can happen more than once during the plugin lifecycle. Plugins with event sourcing capability are required to define an &lt;code&gt;Open()&lt;/code&gt; method that creates a returns a new plugin instance. This is where the framework passes in the user-defined open parameters string.&lt;/p&gt;
&lt;p&gt;The plugin instance type returned by &lt;code&gt;Open()&lt;/code&gt; can define an optional &lt;code&gt;Close()&lt;/code&gt; method bundling any additional deinitialization logic to run while closing the event stream.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-go" data-lang="go"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;func&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;(m&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#666"&gt;*&lt;/span&gt;Plugin)&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#00a000"&gt;Open&lt;/span&gt;(prms&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#0b0;font-weight:bold"&gt;string&lt;/span&gt;)&lt;span style="color:#bbb"&gt; &lt;/span&gt;(source.Instance,&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#0b0;font-weight:bold"&gt;error&lt;/span&gt;)&lt;span style="color:#bbb"&gt; &lt;/span&gt;{&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#080;font-style:italic"&gt;// The format of params is a json object with two params:&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#080;font-style:italic"&gt;// - &amp;#34;start&amp;#34;, which denotes the initial value of sample&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#080;font-style:italic"&gt;// - &amp;#34;maxEvents&amp;#34;: which denotes the number of events to return before EOF.&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#080;font-style:italic"&gt;// Example:&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#080;font-style:italic"&gt;// {&amp;#34;start&amp;#34;: 1, &amp;#34;maxEvents&amp;#34;: 1000}&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;var&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;obj&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;map&lt;/span&gt;[&lt;span style="color:#0b0;font-weight:bold"&gt;string&lt;/span&gt;]&lt;span style="color:#0b0;font-weight:bold"&gt;uint64&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;err&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#666"&gt;:=&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;json.&lt;span style="color:#00a000"&gt;Unmarshal&lt;/span&gt;([]&lt;span style="color:#a2f"&gt;byte&lt;/span&gt;(prms),&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#666"&gt;&amp;amp;&lt;/span&gt;obj)&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;if&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;err&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#666"&gt;!=&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;nil&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;{&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;return&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;nil&lt;/span&gt;,&lt;span style="color:#bbb"&gt; &lt;/span&gt;fmt.&lt;span style="color:#00a000"&gt;Errorf&lt;/span&gt;(&lt;span style="color:#b44"&gt;&amp;#34;params %s could not be parsed: %v&amp;#34;&lt;/span&gt;,&lt;span style="color:#bbb"&gt; &lt;/span&gt;prms,&lt;span style="color:#bbb"&gt; &lt;/span&gt;err)&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;}&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;if&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;_,&lt;span style="color:#bbb"&gt; &lt;/span&gt;ok&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#666"&gt;:=&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;obj[&lt;span style="color:#b44"&gt;&amp;#34;start&amp;#34;&lt;/span&gt;];&lt;span style="color:#bbb"&gt; &lt;/span&gt;!ok&lt;span style="color:#bbb"&gt; &lt;/span&gt;{&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;return&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;nil&lt;/span&gt;,&lt;span style="color:#bbb"&gt; &lt;/span&gt;fmt.&lt;span style="color:#00a000"&gt;Errorf&lt;/span&gt;(&lt;span style="color:#b44"&gt;&amp;#34;params %s did not contain start property&amp;#34;&lt;/span&gt;,&lt;span style="color:#bbb"&gt; &lt;/span&gt;prms)&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;}&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;if&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;_,&lt;span style="color:#bbb"&gt; &lt;/span&gt;ok&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#666"&gt;:=&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;obj[&lt;span style="color:#b44"&gt;&amp;#34;maxEvents&amp;#34;&lt;/span&gt;];&lt;span style="color:#bbb"&gt; &lt;/span&gt;!ok&lt;span style="color:#bbb"&gt; &lt;/span&gt;{&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;return&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;nil&lt;/span&gt;,&lt;span style="color:#bbb"&gt; &lt;/span&gt;fmt.&lt;span style="color:#00a000"&gt;Errorf&lt;/span&gt;(&lt;span style="color:#b44"&gt;&amp;#34;params %s did not contain maxEvents property&amp;#34;&lt;/span&gt;,&lt;span style="color:#bbb"&gt; &lt;/span&gt;prms)&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;}&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;return&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#666"&gt;&amp;amp;&lt;/span&gt;PluginInstance{&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;initParams:&lt;span style="color:#bbb"&gt; &lt;/span&gt;prms,&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;maxEvents:&lt;span style="color:#bbb"&gt; &lt;/span&gt;obj[&lt;span style="color:#b44"&gt;&amp;#34;maxEvents&amp;#34;&lt;/span&gt;],&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;counter:&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#666"&gt;0&lt;/span&gt;,&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;sample:&lt;span style="color:#bbb"&gt; &lt;/span&gt;obj[&lt;span style="color:#b44"&gt;&amp;#34;start&amp;#34;&lt;/span&gt;],&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;},&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;nil&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;func&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;(m&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#666"&gt;*&lt;/span&gt;PluginInstance)&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#00a000"&gt;Close&lt;/span&gt;()&lt;span style="color:#bbb"&gt; &lt;/span&gt;{&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#080;font-style:italic"&gt;// nothing to do here&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="returning-new-events"&gt;Returning new Events&lt;/h3&gt;
&lt;p&gt;New events are generated in batch by the &lt;code&gt;NextBatch&lt;/code&gt; function. The function is mandatory for plugins with event sourcing capability and must be defined as a method of the plugin instance struct type. The &lt;code&gt;pState&lt;/code&gt; argument is the plugin struct type initialized in &lt;code&gt;Init()&lt;/code&gt;, passed in by the framework for ease of access. The plugin state is passed as an instance of the &lt;code&gt;sdk.PluginState&lt;/code&gt; interface, so a manual cast is required to access the internal state variables defined in the struct type.&lt;/p&gt;
&lt;p&gt;The &lt;code&gt;evts&lt;/code&gt; parameter is a sdk-managed batch of events to be used for creating new events. For that, the SDK uses a slab allocator and reuses the same event batch at every iteration to improve performance. The length of the &lt;code&gt;evts&lt;/code&gt; list represents the maximum size of each event batch.
Each element of the batch is an instance of &lt;code&gt;sdk.EventWriter&lt;/code&gt; that provides handy methods to write the event info and data. Event data can be written with the Go &lt;code&gt;io.Writer&lt;/code&gt; interface.&lt;/p&gt;
&lt;p&gt;If an error is returned, the SDK returns a failure to the framework and invalidates the current batch. The special errors &lt;code&gt;sdk.ErrTimeout&lt;/code&gt; and &lt;code&gt;sdk.ErrEOF&lt;/code&gt; have a special meaning, and are used to either advise the framework that no new events are currently available, or that the event stream is terminated.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-go" data-lang="go"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;func&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;(m&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#666"&gt;*&lt;/span&gt;PluginInstance)&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#00a000"&gt;NextBatch&lt;/span&gt;(pState&lt;span style="color:#bbb"&gt; &lt;/span&gt;sdk.PluginState,&lt;span style="color:#bbb"&gt; &lt;/span&gt;evts&lt;span style="color:#bbb"&gt; &lt;/span&gt;sdk.EventWriters)&lt;span style="color:#bbb"&gt; &lt;/span&gt;(&lt;span style="color:#0b0;font-weight:bold"&gt;int&lt;/span&gt;,&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#0b0;font-weight:bold"&gt;error&lt;/span&gt;)&lt;span style="color:#bbb"&gt; &lt;/span&gt;{&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#080;font-style:italic"&gt;// Return EOF if reached maxEvents&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;if&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;m.counter&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#666"&gt;&amp;gt;=&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;m.maxEvents&lt;span style="color:#bbb"&gt; &lt;/span&gt;{&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;return&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#666"&gt;0&lt;/span&gt;,&lt;span style="color:#bbb"&gt; &lt;/span&gt;sdk.ErrEOF&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;}&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#080;font-style:italic"&gt;// access the plugin state&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;plugin&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#666"&gt;:=&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;pState.(&lt;span style="color:#666"&gt;*&lt;/span&gt;Plugin)&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;var&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;n&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#0b0;font-weight:bold"&gt;int&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;var&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;evt&lt;span style="color:#bbb"&gt; &lt;/span&gt;sdk.EventWriter&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;for&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;n&lt;span style="color:#bbb"&gt; &lt;/span&gt;=&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#666"&gt;0&lt;/span&gt;;&lt;span style="color:#bbb"&gt; &lt;/span&gt;m.counter&lt;span style="color:#bbb"&gt; &lt;/span&gt;&amp;lt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;m.maxEvents&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#666"&gt;&amp;amp;&amp;amp;&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;n&lt;span style="color:#bbb"&gt; &lt;/span&gt;&amp;lt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;evts.&lt;span style="color:#00a000"&gt;Len&lt;/span&gt;();&lt;span style="color:#bbb"&gt; &lt;/span&gt;n&lt;span style="color:#666"&gt;++&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;{&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;evt&lt;span style="color:#bbb"&gt; &lt;/span&gt;=&lt;span style="color:#bbb"&gt; &lt;/span&gt;evts.&lt;span style="color:#00a000"&gt;Get&lt;/span&gt;(n)&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;m.counter&lt;span style="color:#666"&gt;++&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#080;font-style:italic"&gt;// Increment sample by 1, also add a jitter of [0:jitter]&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;m.sample&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#666"&gt;+=&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#666"&gt;1&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#666"&gt;+&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#a2f"&gt;uint64&lt;/span&gt;(plugin.rand.&lt;span style="color:#00a000"&gt;Int63n&lt;/span&gt;(&lt;span style="color:#a2f"&gt;int64&lt;/span&gt;(plugin.config.Jitter&lt;span style="color:#666"&gt;+&lt;/span&gt;&lt;span style="color:#666"&gt;1&lt;/span&gt;)))&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#080;font-style:italic"&gt;// The representation of a dummy event is the sample as a string.&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;str&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#666"&gt;:=&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;strconv.&lt;span style="color:#00a000"&gt;Itoa&lt;/span&gt;(&lt;span style="color:#a2f"&gt;int&lt;/span&gt;(m.sample))&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#080;font-style:italic"&gt;// It is not mandatory to set the Timestamp of the event (it&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#080;font-style:italic"&gt;// would be filled in by the framework if set to uint_max),&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#080;font-style:italic"&gt;// but it&amp;#39;s a good practice.&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;evt.&lt;span style="color:#00a000"&gt;SetTimestamp&lt;/span&gt;(&lt;span style="color:#a2f"&gt;uint64&lt;/span&gt;(time.&lt;span style="color:#00a000"&gt;Now&lt;/span&gt;().&lt;span style="color:#00a000"&gt;UnixNano&lt;/span&gt;()))&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;_,&lt;span style="color:#bbb"&gt; &lt;/span&gt;err&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#666"&gt;:=&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;evt.&lt;span style="color:#00a000"&gt;Writer&lt;/span&gt;().&lt;span style="color:#00a000"&gt;Write&lt;/span&gt;([]&lt;span style="color:#a2f"&gt;byte&lt;/span&gt;(str))&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;if&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;err&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#666"&gt;!=&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;nil&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;{&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;return&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#666"&gt;0&lt;/span&gt;,&lt;span style="color:#bbb"&gt; &lt;/span&gt;err&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;}&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;}&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;return&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;n,&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;nil&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="printing-events-as-strings"&gt;Printing Events As Strings&lt;/h3&gt;
&lt;p&gt;Plugins with event sourcing capability can optionally have a &lt;code&gt;String()&lt;/code&gt; method to format the contents of events created with a previous call to &lt;code&gt;NextBatch()&lt;/code&gt;. The event data is readable through an instance of &lt;code&gt;sdk.EventReader&lt;/code&gt; provided by the SDK. Internally, this allows safe memory access and an optimal reusage of the same buffer to maximize the performance of hot framework paths.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-go" data-lang="go"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;func&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;(m&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#666"&gt;*&lt;/span&gt;Plugin)&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#00a000"&gt;String&lt;/span&gt;(evt&lt;span style="color:#bbb"&gt; &lt;/span&gt;sdk.EventReader)&lt;span style="color:#bbb"&gt; &lt;/span&gt;(&lt;span style="color:#0b0;font-weight:bold"&gt;string&lt;/span&gt;,&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#0b0;font-weight:bold"&gt;error&lt;/span&gt;)&lt;span style="color:#bbb"&gt; &lt;/span&gt;{&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;evtBytes,&lt;span style="color:#bbb"&gt; &lt;/span&gt;err&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#666"&gt;:=&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;ioutil.&lt;span style="color:#00a000"&gt;ReadAll&lt;/span&gt;(evt.&lt;span style="color:#00a000"&gt;Reader&lt;/span&gt;())&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;if&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;err&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#666"&gt;!=&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;nil&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;{&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;return&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#b44"&gt;&amp;#34;&amp;#34;&lt;/span&gt;,&lt;span style="color:#bbb"&gt; &lt;/span&gt;err&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;}&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;evtStr&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#666"&gt;:=&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#a2f"&gt;string&lt;/span&gt;(evtBytes)&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#080;font-style:italic"&gt;// The string representation of an event is a json object with the sample&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;return&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;fmt.&lt;span style="color:#00a000"&gt;Sprintf&lt;/span&gt;(&lt;span style="color:#b44"&gt;&amp;#34;{\&amp;#34;sample\&amp;#34;: \&amp;#34;%s\&amp;#34;}&amp;#34;&lt;/span&gt;,&lt;span style="color:#bbb"&gt; &lt;/span&gt;evtStr),&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;nil&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="defining-fields"&gt;Defining Fields&lt;/h3&gt;
&lt;p&gt;This dummy plugin has field extraction capability and exports 3 fields:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;dummy.value&lt;/code&gt;: the value in the event, as a uint64&lt;/li&gt;
&lt;li&gt;&lt;code&gt;dummy.strvalue&lt;/code&gt;: the value in the event, as a string&lt;/li&gt;
&lt;li&gt;&lt;code&gt;dummy.divisible&lt;/code&gt;: this field takes an argument and returns 1 if the value in the event is divisible by the argument (a numeric divisor). For example, if the value was 12, &lt;code&gt;dummy.divisible[3]&lt;/code&gt; would return 1 for that event.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The &lt;code&gt;Fields()&lt;/code&gt; method returns a slice of &lt;code&gt;sdk.FieldEntry&lt;/code&gt; representing all the supported fields.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-go" data-lang="go"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;func&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;(m&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#666"&gt;*&lt;/span&gt;Plugin)&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#00a000"&gt;Fields&lt;/span&gt;()&lt;span style="color:#bbb"&gt; &lt;/span&gt;[]sdk.FieldEntry&lt;span style="color:#bbb"&gt; &lt;/span&gt;{&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;return&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;[]sdk.FieldEntry{&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;{&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;Type:&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#b44"&gt;&amp;#34;uint64&amp;#34;&lt;/span&gt;,&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;Name:&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#b44"&gt;&amp;#34;dummy.divisible&amp;#34;&lt;/span&gt;,&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;Desc:&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#b44"&gt;&amp;#34;Return 1 if the value is divisible by the provided divisor, 0 otherwise&amp;#34;&lt;/span&gt;,&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;Arg:&lt;span style="color:#bbb"&gt; &lt;/span&gt;sdk.FieldEntryArg{IsRequired:&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;true&lt;/span&gt;,&lt;span style="color:#bbb"&gt; &lt;/span&gt;IsKey:&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;true&lt;/span&gt;},&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;},&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;{&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;Type:&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#b44"&gt;&amp;#34;uint64&amp;#34;&lt;/span&gt;,&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;Name:&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#b44"&gt;&amp;#34;dummy.value&amp;#34;&lt;/span&gt;,&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;Desc:&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#b44"&gt;&amp;#34;The sample value in the event&amp;#34;&lt;/span&gt;,&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;},&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;{&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;Type:&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#b44"&gt;&amp;#34;string&amp;#34;&lt;/span&gt;,&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;Name:&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#b44"&gt;&amp;#34;dummy.strvalue&amp;#34;&lt;/span&gt;,&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;Desc:&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#b44"&gt;&amp;#34;The sample value in the event, as a string&amp;#34;&lt;/span&gt;,&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;},&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;}&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="extracting-fields"&gt;Extracting Fields&lt;/h3&gt;
&lt;p&gt;The &lt;code&gt;Extract&lt;/code&gt; method extracts all of the supported fields. The &lt;code&gt;req&lt;/code&gt; parameter allows accessing all the info regarding the field request, such as the field id or name, and the optional user-passed argument. The &lt;code&gt;evt&lt;/code&gt; parameter is an interface that helps reading the event info and data.&lt;/p&gt;
&lt;p&gt;The extracted field value must be set through the &lt;code&gt;SetValue&lt;/code&gt; method of &lt;code&gt;sdk.ExtractRequest&lt;/code&gt;. Returning from &lt;code&gt;Extract&lt;/code&gt; without calling &lt;code&gt;SetValue&lt;/code&gt; will signal the SDK that the requested field is not present in the given event.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-go" data-lang="go"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;func&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;(m&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#666"&gt;*&lt;/span&gt;Plugin)&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#00a000"&gt;Extract&lt;/span&gt;(req&lt;span style="color:#bbb"&gt; &lt;/span&gt;sdk.ExtractRequest,&lt;span style="color:#bbb"&gt; &lt;/span&gt;evt&lt;span style="color:#bbb"&gt; &lt;/span&gt;sdk.EventReader)&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#0b0;font-weight:bold"&gt;error&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;{&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;evtBytes,&lt;span style="color:#bbb"&gt; &lt;/span&gt;err&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#666"&gt;:=&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;ioutil.&lt;span style="color:#00a000"&gt;ReadAll&lt;/span&gt;(evt.&lt;span style="color:#00a000"&gt;Reader&lt;/span&gt;())&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;if&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;err&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#666"&gt;!=&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;nil&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;{&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;return&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;err&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;}&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;evtStr&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#666"&gt;:=&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#a2f"&gt;string&lt;/span&gt;(evtBytes)&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;evtVal,&lt;span style="color:#bbb"&gt; &lt;/span&gt;err&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#666"&gt;:=&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;strconv.&lt;span style="color:#00a000"&gt;Atoi&lt;/span&gt;(evtStr)&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;if&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;err&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#666"&gt;!=&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;nil&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;{&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;return&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;err&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;}&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;switch&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;req.&lt;span style="color:#00a000"&gt;FieldID&lt;/span&gt;()&lt;span style="color:#bbb"&gt; &lt;/span&gt;{&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;case&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#666"&gt;0&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#080;font-style:italic"&gt;// dummy.divisible&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;divisor,&lt;span style="color:#bbb"&gt; &lt;/span&gt;err&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#666"&gt;:=&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;strconv.&lt;span style="color:#00a000"&gt;Atoi&lt;/span&gt;(req.&lt;span style="color:#00a000"&gt;ArgKey&lt;/span&gt;())&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;if&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;err&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#666"&gt;!=&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;nil&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;{&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;return&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;fmt.&lt;span style="color:#00a000"&gt;Errorf&lt;/span&gt;(&lt;span style="color:#b44"&gt;&amp;#34;argument to dummy.divisible %s could not be converted to number&amp;#34;&lt;/span&gt;,&lt;span style="color:#bbb"&gt; &lt;/span&gt;req.&lt;span style="color:#00a000"&gt;ArgKey&lt;/span&gt;())&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;}&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;if&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;evtVal&lt;span style="color:#666"&gt;%&lt;/span&gt;divisor&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#666"&gt;==&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#666"&gt;0&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;{&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;req.&lt;span style="color:#00a000"&gt;SetValue&lt;/span&gt;(&lt;span style="color:#a2f"&gt;uint64&lt;/span&gt;(&lt;span style="color:#666"&gt;1&lt;/span&gt;))&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;}&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;else&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;{&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;req.&lt;span style="color:#00a000"&gt;SetValue&lt;/span&gt;(&lt;span style="color:#a2f"&gt;uint64&lt;/span&gt;(&lt;span style="color:#666"&gt;0&lt;/span&gt;))&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;}&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;case&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#666"&gt;1&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#080;font-style:italic"&gt;// dummy.value&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;req.&lt;span style="color:#00a000"&gt;SetValue&lt;/span&gt;(&lt;span style="color:#a2f"&gt;uint64&lt;/span&gt;(evtVal))&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;case&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#666"&gt;2&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#080;font-style:italic"&gt;// dummy.strvalue&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;req.&lt;span style="color:#00a000"&gt;SetValue&lt;/span&gt;(evtStr)&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;default&lt;/span&gt;:&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;return&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;fmt.&lt;span style="color:#00a000"&gt;Errorf&lt;/span&gt;(&lt;span style="color:#b44"&gt;&amp;#34;no known field: %s&amp;#34;&lt;/span&gt;,&lt;span style="color:#bbb"&gt; &lt;/span&gt;req.&lt;span style="color:#00a000"&gt;Field&lt;/span&gt;())&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;}&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;return&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;nil&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="running-the-plugin"&gt;Running the Plugin&lt;/h3&gt;
&lt;p&gt;This plugin can be configured in Falco by adding the following to &lt;code&gt;falco.yaml&lt;/code&gt; file:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;plugins&lt;/span&gt;:&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;- &lt;span style="color:#008000;font-weight:bold"&gt;name&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;dummy&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;library_path&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;/tmp/my-plugins/dummy/libdummy.so&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;init_config&lt;/span&gt;:&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;jitter&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#666"&gt;10&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;open_params&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#b44"&gt;&amp;#39;{&amp;#34;start&amp;#34;: 1, &amp;#34;maxEvents&amp;#34;: 20}&amp;#39;&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#080;font-style:italic"&gt;## Optional&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;load_plugins&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;[dummy]&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;This simple rule prints a Falco alert any time the event number is between 0 and 10, and the sample value is divisible by 3:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;- &lt;span style="color:#008000;font-weight:bold"&gt;rule&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;My Dummy Rule&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;desc&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;My Desc&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;condition&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;evt.num &amp;gt; 0 and evt.num &amp;lt; 10 and dummy.divisible[3] = 1&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;output&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;A dummy event | event=%evt.plugininfo sample=%dummy.value sample_str=%dummy.strvalue num=%evt.num&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;priority&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;INFO&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;source&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;dummy&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Here's what it looks like when run:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;$ ./falco -r ../falco-files/dummy_rules.yaml -c ../falco-files/falco.yaml
Wed Feb 2 16:26:35 2022: Falco version 0.31.0 (driver version 319368f1ad778691164d33d59945e00c5752cd27)
Wed Feb 2 16:26:35 2022: Falco initialized with configuration file ../falco-files/falco.yaml
Wed Feb 2 16:26:35 2022: Loading plugin (dummy) from file /tmp/my-plugins/dummy/libdummy.so
Wed Feb 2 16:26:35 2022: Loading rules from file ../rules/dummy_rules.yaml:
Wed Feb 2 16:26:35 2022: Starting internal webserver, listening on port 8765
16:26:35.527827816: Notice A dummy event (event={&amp;#34;sample&amp;#34;: &amp;#34;6&amp;#34;} sample=6 sample_str=6 num=1)
16:26:35.527829658: Notice A dummy event (event={&amp;#34;sample&amp;#34;: &amp;#34;18&amp;#34;} sample=18 sample_str=18 num=3)
16:26:35.527831048: Notice A dummy event (event={&amp;#34;sample&amp;#34;: &amp;#34;33&amp;#34;} sample=33 sample_str=33 num=8)
Events detected: 3
Rule counts by severity:
INFO: 3
Triggered rules by rule name:
My Dummy Rule: 3
Syscall event drop monitoring:
- event drop detected: 0 occurrences
- num times actions taken: 0
&lt;/code&gt;&lt;/pre&gt;</description></item><item><title>Docs: Install on a host (DEB, RPM)</title><link>https://v0-43--falcosecurity.netlify.app/docs/setup/packages/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://v0-43--falcosecurity.netlify.app/docs/setup/packages/</guid><description>
&lt;div class="card card-sm pageinfo pageinfo-primary my-4"&gt;
&lt;div class="card-body"&gt;
&lt;div class="card-text"&gt;
&lt;p&gt;Falco consumes streams of events and evaluates them against a set of security &lt;a class='glossary-tooltip' title='Rules are conditions under which an alert should be generated.' data-toggle='tooltip' data-placement='top' href='https://v0-43--falcosecurity.netlify.app/docs/rules/basic-elements/#rules' target='_blank' aria-label='rules'&gt;rules&lt;/a&gt; to detect abnormal behavior. By default, Falco is pre-configured to consume events from the Linux Kernel. This scenario requires Falco to be privileged, and depending on the kernel version installed on the host, a &lt;a class='glossary-tooltip' title='The global term for the software that sends events from the kernel.' data-toggle='tooltip' data-placement='top' href='https://v0-43--falcosecurity.netlify.app/docs/concepts/event-sources/kernel/' target='_blank' aria-label='driver'&gt;driver&lt;/a&gt; needs to be installed.&lt;/p&gt;
&lt;p&gt;For other installation scenarios, such as consuming cloud events or other data sources using plugins, please refer to the &lt;a href="https://v0-43--falcosecurity.netlify.app/docs/concepts/plugins/"&gt;Plugins&lt;/a&gt; section.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;There are two main methods to install Falco on your host using the &lt;a href="https://v0-43--falcosecurity.netlify.app/docs/download"&gt;released Falco packages&lt;/a&gt;:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;RPM or DEB package (includes Systemd setup):&lt;/strong&gt; This method is detailed on this page.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Tarball archive:&lt;/strong&gt; For instructions, refer to the &lt;a href="https://v0-43--falcosecurity.netlify.app/docs/setup/tarball/"&gt;Install on a host (tarball)&lt;/a&gt; page.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id="system-requirements"&gt;System requirements&lt;/h2&gt;
&lt;p&gt;Falco runs on &lt;strong&gt;Linux&lt;/strong&gt; and is available for the &lt;strong&gt;x86_64&lt;/strong&gt; and &lt;strong&gt;aarch64&lt;/strong&gt; architectures. Falco with its bundled plugins requires &lt;strong&gt;GLIBC 2.28&lt;/strong&gt; or newer. You can check your system's GLIBC version by running &lt;code&gt;ldd --version&lt;/code&gt;.&lt;/p&gt;
&lt;h2 id="install"&gt;Install&lt;/h2&gt;
&lt;p&gt;This installation method is for Linux distributions with a package manager that supports DEB (Debian, Ubuntu) or RPM (CentOS, RHEL, Fedora, Amazon Linux) packages.&lt;/p&gt;
&lt;p&gt;In interactive installations, the Falco installation package uses the &lt;code&gt;dialog&lt;/code&gt; binary for configuration prompts. The dialog allows the user to complete the Systemd setup which includes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The driver selection (kmod, ebpf, modern_ebpf) or automatic selection&lt;/li&gt;
&lt;li&gt;The Falcoctl service setup&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;In non-interactive installations (e.g., &lt;code&gt;dialog&lt;/code&gt; is not available, or if the user disables it by setting &lt;code&gt;FALCO_FRONTEND=noninteractive&lt;/code&gt; when installing Falco using the package manager), the automatic driver selection is enabled by default and for other options, the user needs to manually configure the &lt;a href="https://systemd.io/"&gt;Systemd&lt;/a&gt; services.&lt;/p&gt;
&lt;h3 id="env-variables"&gt;Env variables&lt;/h3&gt;
&lt;p&gt;The following environment variables can be used to customize the installation process:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;FALCO_FRONTEND&lt;/code&gt;: Set to &lt;code&gt;noninteractive&lt;/code&gt; to disable the dialog prompts. The default is &lt;code&gt;dialog&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;FALCO_DRIVER_CHOICE&lt;/code&gt;: Set to &lt;code&gt;kmod&lt;/code&gt;, &lt;code&gt;ebpf&lt;/code&gt;, or &lt;code&gt;modern_ebpf&lt;/code&gt; to choose a driver; set to &lt;code&gt;none&lt;/code&gt; to disable service installation. If one of the previous option is selected, the dialog will be skipped too. The default (empty) is automatic selection.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;FALCOCTL_ENABLED&lt;/code&gt;: Set to &lt;code&gt;no&lt;/code&gt; to disable the automatic rules update provided by &lt;code&gt;falcoctl&lt;/code&gt;. The default (empty) or any value other than &lt;code&gt;no&lt;/code&gt; will keep the option enabled.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;These environment variables can be used in conjunction with the package manager (as described in the following sections) to customize the installation process as needed.&lt;/p&gt;
&lt;p&gt;Examples:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;No dialog, no driver, no automatic rules update:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#b8860b"&gt;FALCO_DRIVER_CHOICE&lt;/span&gt;&lt;span style="color:#666"&gt;=&lt;/span&gt;none apt-get install -y falco
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Install with &lt;code&gt;kmod&lt;/code&gt; driver and automatic rules update:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#b8860b"&gt;FALCO_DRIVER_CHOICE&lt;/span&gt;&lt;span style="color:#666"&gt;=&lt;/span&gt;kmod apt-get install -y falco
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;No dialog, automatic selection and automatic rules update:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#b8860b"&gt;FALCO_FRONTEND&lt;/span&gt;&lt;span style="color:#666"&gt;=&lt;/span&gt;noninteractive apt-get install -y falco
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;No dialog, automatic selection and no automatic rules update:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#b8860b"&gt;FALCO_FRONTEND&lt;/span&gt;&lt;span style="color:#666"&gt;=&lt;/span&gt;noninteractive &lt;span style="color:#b8860b"&gt;FALCOCTL_ENABLED&lt;/span&gt;&lt;span style="color:#666"&gt;=&lt;/span&gt;no apt-get install -y falco
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="install-with-apt"&gt;&lt;code&gt;apt&lt;/code&gt; (Debian/Ubuntu)&lt;/h3&gt;
&lt;p&gt;The following steps are for Debian and Debian-based distributions, such as Ubuntu, which use the &lt;code&gt;apt&lt;/code&gt; package manager.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Trust the &lt;code&gt;falcosecurity&lt;/code&gt; GPG key&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;curl -fsSL https://falco.org/repo/falcosecurity-packages.asc | &lt;span style="color:#b62;font-weight:bold"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo gpg --dearmor -o /usr/share/keyrings/falco-archive-keyring.gpg
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Configure the apt repository&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a2f"&gt;echo&lt;/span&gt; &lt;span style="color:#b44"&gt;&amp;#34;deb [signed-by=/usr/share/keyrings/falco-archive-keyring.gpg] https://download.falco.org/packages/deb stable main&amp;#34;&lt;/span&gt; | &lt;span style="color:#b62;font-weight:bold"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo tee -a /etc/apt/sources.list.d/falcosecurity.list
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="card card-sm pageinfo pageinfo-info my-4"&gt;
&lt;div class="card-body"&gt;
&lt;div class="card-text"&gt;
&lt;p&gt;In older releases of Debian (Debian 9 and older ones), you might need to additionally install the package &lt;code&gt;apt-transport-https&lt;/code&gt; to allow access to the Falco repository using the &lt;code&gt;https&lt;/code&gt; protocol.&lt;/p&gt;
&lt;p&gt;The following command will install that package on your system:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo apt-get install apt-transport-https
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;ol start="3"&gt;
&lt;li&gt;
&lt;p&gt;Update the package list&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo apt-get update -y
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Install some required dependencies that are needed to build the &lt;a class='glossary-tooltip' title='The Kernel module collects syscalls events from the Kernel, as the modern eBPF probe does.' data-toggle='tooltip' data-placement='top' href='https://v0-43--falcosecurity.netlify.app/docs/concepts/event-sources/kernel/#kernel-module' target='_blank' aria-label='Kernel Module'&gt;Kernel Module&lt;/a&gt; and the &lt;a class='glossary-tooltip' title='The eBPF probe (deprecated) collects syscall events from the Kernel, as the Kernel module does.' data-toggle='tooltip' data-placement='top' href='https://v0-43--falcosecurity.netlify.app/docs/concepts/event-sources/kernel/#legacy-ebpf-probe' target='_blank' aria-label='eBPF probe'&gt;eBPF probe&lt;/a&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Note&lt;/em&gt;: You don't need to install these dependencies if you want to use the &lt;a class='glossary-tooltip' title='More robust eBPF probe which brings the CO-RE paradigm, better performances and maintainability.' data-toggle='tooltip' data-placement='top' href='https://v0-43--falcosecurity.netlify.app/docs/concepts/event-sources/kernel/#modern-ebpf-probe' target='_blank' aria-label='Modern eBPF'&gt;Modern eBPF&lt;/a&gt;.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo apt install -y dkms make linux-headers-&lt;span style="color:#a2f;font-weight:bold"&gt;$(&lt;/span&gt;uname -r&lt;span style="color:#a2f;font-weight:bold"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#080;font-style:italic"&gt;# If you use falcoctl driver loader to build the eBPF probe locally you need also clang toolchain&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo apt install -y clang llvm
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#080;font-style:italic"&gt;# You can install also the dialog package if you want it&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo apt install -y dialog
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Install the Falco package&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo apt-get install -y falco
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id="install-with-yum"&gt;&lt;code&gt;yum&lt;/code&gt; (CentOS/RHEL/Fedora/Amazon Linux)&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Trust the &lt;code&gt;falcosecurity&lt;/code&gt; GPG key&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo rpm --import https://falco.org/repo/falcosecurity-packages.asc
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Configure the &lt;code&gt;yum&lt;/code&gt; repository&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo curl -o /etc/yum.repos.d/falcosecurity.repo https://falco.org/repo/falcosecurity-rpm.repo
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Update the package list&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo yum update -y
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Install some required dependencies that are needed to build the &lt;a class='glossary-tooltip' title='The Kernel module collects syscalls events from the Kernel, as the modern eBPF probe does.' data-toggle='tooltip' data-placement='top' href='https://v0-43--falcosecurity.netlify.app/docs/concepts/event-sources/kernel/#kernel-module' target='_blank' aria-label='Kernel Module'&gt;Kernel Module&lt;/a&gt; and the &lt;a class='glossary-tooltip' title='The eBPF probe (deprecated) collects syscall events from the Kernel, as the Kernel module does.' data-toggle='tooltip' data-placement='top' href='https://v0-43--falcosecurity.netlify.app/docs/concepts/event-sources/kernel/#legacy-ebpf-probe' target='_blank' aria-label='eBPF probe'&gt;eBPF probe&lt;/a&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Note&lt;/em&gt;: You don't need to install these dependencies if you want to use the &lt;a class='glossary-tooltip' title='More robust eBPF probe which brings the CO-RE paradigm, better performances and maintainability.' data-toggle='tooltip' data-placement='top' href='https://v0-43--falcosecurity.netlify.app/docs/concepts/event-sources/kernel/#modern-ebpf-probe' target='_blank' aria-label='Modern eBPF'&gt;Modern eBPF&lt;/a&gt;.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#080;font-style:italic"&gt;# If necessary install it using: `yum install epel-release` (or `amazon-linux-extras install epel` in case of amzn2), then `yum install make dkms`.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo yum install -y dkms make
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#080;font-style:italic"&gt;# If the package was not found by the below command, you might need to run `yum distro-sync` in order to fix it. Rebooting the system may be required.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo yum install -y kernel-devel-&lt;span style="color:#a2f;font-weight:bold"&gt;$(&lt;/span&gt;uname -r&lt;span style="color:#a2f;font-weight:bold"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#080;font-style:italic"&gt;# If you use falcoctl driver loader to build the eBPF probe locally you need also clang toolchain&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo yum install -y clang llvm
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#080;font-style:italic"&gt;# You can install also the dialog package if you want it&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo yum install -y dialog
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Install the Falco package&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo yum install -y falco
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="card card-sm pageinfo pageinfo-primary my-4"&gt;
&lt;div class="card-body"&gt;
&lt;div class="card-text"&gt;
&lt;p&gt;You might need to validate the driver signature if your system has UEFI SecureBoot enabled. Follow these steps to do so:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Import the DKMS Machine Owner Key&lt;/p&gt;
&lt;pre&gt;&lt;code&gt; ```shell
sudo mokutil --import /var/lib/dkms/mok.pub
```
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Restart the system and wait for the MOK key enrollment prompt&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Choose the option: &lt;code&gt;Enroll MOK&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Load the Falco driver&lt;/p&gt;
&lt;pre&gt;&lt;code&gt; ```shell
sudo insmod /var/lib/dkms/falco/&amp;lt;driver-version&amp;gt;/$(uname -r)/x86_64/module/falco.ko.xz
```
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="card card-sm pageinfo pageinfo-warning my-4"&gt;
&lt;div class="card-body"&gt;
&lt;div class="card-text"&gt;
&lt;p&gt;&lt;strong&gt;RHEL 8 / UBI 8 users:&lt;/strong&gt; Starting from Falco 0.42, you may need to set the &lt;code&gt;LD_PRELOAD&lt;/code&gt; environment variable due to a glibc compatibility issue:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#b8860b"&gt;LD_PRELOAD&lt;/span&gt;&lt;span style="color:#666"&gt;=&lt;/span&gt;/lib64/libresolv.so.2 falco
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;When using systemd, you can add this to your service override or edit the unit file to include &lt;code&gt;Environment=&amp;quot;LD_PRELOAD=/lib64/libresolv.so.2&amp;quot;&lt;/code&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id="install-with-zypper"&gt;&lt;code&gt;zypper&lt;/code&gt; (openSUSE)&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Trust the &lt;code&gt;falcosecurity&lt;/code&gt; GPG key&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo rpm --import https://falco.org/repo/falcosecurity-packages.asc
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Configure the zypper repository&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo curl -o /etc/zypp/repos.d/falcosecurity.repo https://falco.org/repo/falcosecurity-rpm.repo
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Update the package list&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo zypper -n update
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Install some required dependencies that are needed to build the &lt;a class='glossary-tooltip' title='The Kernel module collects syscalls events from the Kernel, as the modern eBPF probe does.' data-toggle='tooltip' data-placement='top' href='https://v0-43--falcosecurity.netlify.app/docs/concepts/event-sources/kernel/#kernel-module' target='_blank' aria-label='Kernel Module'&gt;Kernel Module&lt;/a&gt; and the &lt;a class='glossary-tooltip' title='The eBPF probe (deprecated) collects syscall events from the Kernel, as the Kernel module does.' data-toggle='tooltip' data-placement='top' href='https://v0-43--falcosecurity.netlify.app/docs/concepts/event-sources/kernel/#legacy-ebpf-probe' target='_blank' aria-label='eBPF probe'&gt;eBPF probe&lt;/a&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Note&lt;/em&gt;: You don't need to install these dependencies if you want to use the &lt;a class='glossary-tooltip' title='More robust eBPF probe which brings the CO-RE paradigm, better performances and maintainability.' data-toggle='tooltip' data-placement='top' href='https://v0-43--falcosecurity.netlify.app/docs/concepts/event-sources/kernel/#modern-ebpf-probe' target='_blank' aria-label='Modern eBPF'&gt;Modern eBPF&lt;/a&gt;.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo zypper -n install dkms make
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#080;font-style:italic"&gt;# If the package was not found by the below command, you might need to run `zypper -n dist-upgrade` in order to fix it. Rebooting the system may be required.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo zypper -n install kernel-default-devel-&lt;span style="color:#a2f;font-weight:bold"&gt;$(&lt;/span&gt;uname -r | sed s/&lt;span style="color:#b62;font-weight:bold"&gt;\-&lt;/span&gt;default//g&lt;span style="color:#a2f;font-weight:bold"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#080;font-style:italic"&gt;# If you use falcoctl driver loader to build the eBPF probe locally you need also clang toolchain&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo zypper -n install clang llvm
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#080;font-style:italic"&gt;# You can install also the dialog package if you want it&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo zypper -n install dialog
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Install Falco:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo zypper -n install falco
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Uninstall Falco:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo zypper rm falco
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id="systemd-setup"&gt;Systemd setup&lt;/h2&gt;
&lt;h3 id="systemd-setup-with-dialog"&gt;Setup with dialog&lt;/h3&gt;
&lt;p&gt;By default, if you have the &lt;code&gt;dialog&lt;/code&gt; binary installed on your system, you will be prompted with this:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://v0-43--falcosecurity.netlify.app/docs/getting-started/images/dialog-1.png" alt="" loading="lazy" /&gt;
&lt;/p&gt;
&lt;p&gt;From here you can choose one of our 3 drivers &lt;code&gt;Kmod&lt;/code&gt;, &lt;code&gt;eBPF&lt;/code&gt;, &lt;code&gt;Modern eBPF&lt;/code&gt;, a &lt;a href="https://v0-43--falcosecurity.netlify.app/docs/setup/packages/#manual-configuration"&gt;&lt;code&gt;Manual configuration&lt;/code&gt;&lt;/a&gt; or the &lt;code&gt;Automatic selection&lt;/code&gt; (recommended) to trigger the automatic logic to select the best driver for you. When you choose a driver from the dialog, the &lt;code&gt;systemd&lt;/code&gt; service is always enabled by default so it will start at every system reboot. If you want to disable this behavior type &lt;code&gt;systemctl disable falco-kmod.service&lt;/code&gt; (if you are using the kernel module like in this example).&lt;/p&gt;
&lt;p&gt;After the first dialog, you should see a second one:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://v0-43--falcosecurity.netlify.app/docs/getting-started/images/dialog-2.png" alt="" loading="lazy" /&gt;
&lt;/p&gt;
&lt;p&gt;If you choose &lt;code&gt;Yes&lt;/code&gt;, &lt;code&gt;falcoctl&lt;/code&gt; will periodically check for ruleset updates and, if a new update is available, will pull
and install it.&lt;/p&gt;
&lt;h3 id="manual-configuration"&gt;Manual configuration&lt;/h3&gt;
&lt;p&gt;If you chose &lt;code&gt;Manual configuration&lt;/code&gt; from the dialog, you need to complete the setup configuration.&lt;/p&gt;
&lt;p&gt;First, let's verify the available services:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-plain" data-lang="plain"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;$ sudo systemctl list-unit-files &amp;#34;falco*&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;UNIT FILE STATE PRESET
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;falco-bpf.service disabled enabled
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;falco-custom.service disabled enabled
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;falco-kmod-inject.service static enabled
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;falco-kmod.service disabled enabled
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;falco-modern-bpf.service disabled enabled
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;falcoctl-artifact-follow.service disabled enabled
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Using the &lt;code&gt;systemctl&lt;/code&gt; command, you can now enable the desired unit to start at boot time.&lt;/p&gt;
&lt;p&gt;Let's say you want to enable the modern eBPF probe:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-plain" data-lang="plain"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;$ sudo systemctl enable falco-modern-bpf.service
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Created symlink /etc/systemd/system/falco.service → /usr/lib/systemd/system/falco-modern-bpf.service.
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Created symlink /etc/systemd/system/multi-user.target.wants/falco-modern-bpf.service → /usr/lib/systemd/system/falco-modern-bpf.service.
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;$ sudo systemctl list-unit-files &amp;#34;falco*&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;UNIT FILE STATE PRESET
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;falco-bpf.service disabled enabled
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;falco-custom.service disabled enabled
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;falco-kmod-inject.service static -
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;falco-kmod.service disabled enabled
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;falco-modern-bpf.service enabled enabled
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;falco.service alias -
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;falcoctl-artifact-follow.service disabled enabled
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Or you'd like to switch to using the kernel module:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-plain" data-lang="plain"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;$ sudo systemctl disable falco-modern-bpf.service
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Removed &amp;#34;/etc/systemd/system/multi-user.target.wants/falco-modern-bpf.service&amp;#34;.
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Removed &amp;#34;/etc/systemd/system/falco.service&amp;#34;.
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;$ sudo systemctl enable falco-kmod.service
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Created symlink /etc/systemd/system/falco.service → /usr/lib/systemd/system/falco-kmod.service.
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Created symlink /etc/systemd/system/multi-user.target.wants/falco-kmod.service → /usr/lib/systemd/system/falco-kmod.service.
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;$ sudo systemctl list-unit-files &amp;#34;falco*&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;UNIT FILE STATE PRESET
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;falco-bpf.service disabled enabled
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;falco-custom.service disabled enabled
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;falco-kmod-inject.service static -
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;falco-kmod.service enabled enabled
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;falco-modern-bpf.service disabled enabled
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;falco.service alias -
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;falcoctl-artifact-follow.service disabled enabled
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;7 unit files listed.
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;As you can see, enabling the &lt;code&gt;falco-kmod.service&lt;/code&gt;, &lt;code&gt;falco-modern-bpf.service&lt;/code&gt; or &lt;code&gt;falco-custom.service&lt;/code&gt; also creates a
new alias/service called &lt;code&gt;falco.service&lt;/code&gt; that can be used in place of the aliased ones.&lt;/p&gt;
&lt;div class="card card-sm pageinfo pageinfo-info my-4"&gt;
&lt;div class="card-body"&gt;
&lt;div class="card-text"&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;As a side note, if you prefer not to use the &lt;code&gt;falcoctl&lt;/code&gt; tool to automatically update your rules, you can mask it as follows. Otherwise, as explained &lt;a href="https://v0-43--falcosecurity.netlify.app/docs/install-operate/installation/#rule-update"&gt;here&lt;/a&gt;, Falco will enable it too.&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;$ sudo systemctl mask falcoctl-artifact-follow.service
Created symlink /etc/systemd/system/falcoctl-artifact-follow.service → /dev/null.
&lt;/code&gt;&lt;/pre&gt;&lt;h3 id="systemd-configuring-services"&gt;Configuring services&lt;/h3&gt;
&lt;p&gt;If you installed the Falco packages using the &lt;code&gt;dialog&lt;/code&gt; option, all your services should already be up and running. However, if you chose the &lt;code&gt;Manual configuration&lt;/code&gt; option, you need to configure the services manually.&lt;/p&gt;
&lt;p&gt;If you need to switch from one service to another, ensure that the current service is properly stopped before starting the new one. This can be done by using the appropriate service management commands for your system (e.g., &lt;code&gt;systemctl stop &amp;lt;service_name&amp;gt;&lt;/code&gt; and &lt;code&gt;systemctl start &amp;lt;new_service_name&amp;gt;&lt;/code&gt;).&lt;/p&gt;
&lt;p&gt;For example, if you want to use the service for the &lt;a class='glossary-tooltip' title='The eBPF probe (deprecated) collects syscall events from the Kernel, as the Kernel module does.' data-toggle='tooltip' data-placement='top' href='https://v0-43--falcosecurity.netlify.app/docs/concepts/event-sources/kernel/#legacy-ebpf-probe' target='_blank' aria-label='eBPF probe'&gt;eBPF probe&lt;/a&gt;:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Type &lt;code&gt;systemctl list-units | grep falco&lt;/code&gt; to check that no unit is running. Stop the current services, if any.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Now you have to decide whether you want the Falcoctl service running together with the Falco one. If yes you don't have to do anything, else you will need to mask the Falcoctl service with &lt;code&gt;systemctl mask falcoctl-artifact-follow.service&lt;/code&gt;. The Falcoctl service is strictly related to the Falco one so if you don't mask it, it will be started together with the Falco service.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Type &lt;code&gt;falcoctl driver config --type ebpf&lt;/code&gt; to configure Falco to use &lt;a class='glossary-tooltip' title='The eBPF probe (deprecated) collects syscall events from the Kernel, as the Kernel module does.' data-toggle='tooltip' data-placement='top' href='https://v0-43--falcosecurity.netlify.app/docs/concepts/event-sources/kernel/#legacy-ebpf-probe' target='_blank' aria-label='eBPF probe'&gt;eBPF probe&lt;/a&gt;, then &lt;code&gt;falcoctl driver install&lt;/code&gt; to download/compile the eBPF probe.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Now running &lt;code&gt;systemctl start falco-bpf.service&lt;/code&gt; and typing &lt;code&gt;systemctl list-units | grep falco&lt;/code&gt; you should see something like that (supposing you didn't mask the Falcoctl service):&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;falco-bpf.service loaded active running Falco: Container Native Runtime Security with ebpf
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;falcoctl-artifact-follow.service loaded active running Falcoctl Artifact Follow: automatic artifacts update service
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;If you want to stop both services in one shot&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;systemctl stop falco-bpf.service
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id="falcoctl-service"&gt;Falcoctl service (automatic rules update)&lt;/h3&gt;
&lt;p&gt;If this service is enabled (as default), typing &lt;code&gt;systemctl list-units | grep falco&lt;/code&gt; you should see something similar to this:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;falco-kmod-inject.service loaded active exited Falco: Container Native Runtime Security with kmod, inject.
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;falco-kmod.service loaded active running Falco: Container Native Runtime Security with kmod
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;falcoctl-artifact-follow.service loaded active running Falcoctl Artifact Follow: automatic artifacts update service
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ul&gt;
&lt;li&gt;&lt;code&gt;falco-kmod-inject.service&lt;/code&gt; injects the kernel module and exits. This unit remains after exit to detach the kernel module when the &lt;code&gt;falco-kmod.service&lt;/code&gt; will be stopped.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;falco-kmod.service&lt;/code&gt; instance of Falco running the kernel module.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;falcoctl-artifact-follow.service&lt;/code&gt; instance of Falcoctl that searches for new rulesets. This unit will be stopped when &lt;code&gt;falco-kmod.service&lt;/code&gt; terminates.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The Falcoctl service is strictly related to the Falco one:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;when the Falco service starts it searches for a unit called &lt;code&gt;falcoctl-artifact-follow.service&lt;/code&gt; and if present it starts it. Please note that following this pattern, if you enable the Falco service and you reboot your system, Falcoctl will start again with Falco even if you don't enable it through &lt;code&gt;systemd enable&lt;/code&gt;! You can disable this behavior by stopping the Falcoctl service and masking it &lt;code&gt;systemctl mask falcoctl-artifact-follow.service&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;when the Falco service stops also the Falcoctl service is stopped.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;In case the &lt;strong&gt;Falcoctl service is not enabled&lt;/strong&gt;, the Falco package will only start the &lt;code&gt;falco-kmod.service&lt;/code&gt;. Typing &lt;code&gt;systemctl list-units | grep falco&lt;/code&gt; you should see something similar to this:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;falco-kmod-inject.service loaded active exited Falco: Container Native Runtime Security with kmod, inject.
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;falco-kmod.service loaded active running Falco: Container Native Runtime Security with kmod
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;In this mode, the Falcoctl service is masked by default so if you want to enable it in a second step you need to type &lt;code&gt;systemctl unmask falcoctl-artifact-follow.service&lt;/code&gt;.&lt;/p&gt;
&lt;h3 id="systemd-custom-service"&gt;Custom service&lt;/h3&gt;
&lt;p&gt;You may have noticed a Falco unit called &lt;code&gt;falco-custom.service&lt;/code&gt;. You should use it when you want to run Falco with a custom configuration like a plugin. Please note that in this case you have to modify this template according to how you want to run Falco, the unit should not be used as is!&lt;/p&gt;
&lt;h2 id="configuration"&gt;Configuration&lt;/h2&gt;
&lt;p&gt;The Falco configuration file is located at &lt;code&gt;/etc/falco/falco.yaml&lt;/code&gt;. You can edit it to customize Falco's behavior.&lt;/p&gt;
&lt;p&gt;Since Falco 0.38.0, a new config key, &lt;code&gt;config_files&lt;/code&gt;, allows the user to load additional configuration files to override main config entries. This allows user to keep local customization between Falco upgrades. Its default value points to a new folder, &lt;code&gt;/etc/falco/config.d/&lt;/code&gt; that gets installed by Falco and will be processed to look for local configuration files.&lt;/p&gt;
&lt;h3 id="hot-reload"&gt;Hot Reload&lt;/h3&gt;
&lt;p&gt;By default, with the &lt;code&gt;watch_config_files&lt;/code&gt; configuration option enabled, Falco automatically monitors changes to configuration and rule files. When these files are modified, Falco will automatically reload the updated configuration without requiring a restart.&lt;/p&gt;
&lt;p&gt;If this option is disabled, you can manually restart the Falco systemd service to apply the changes:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;systemctl restart falco
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="upgrade"&gt;Upgrade&lt;/h2&gt;
&lt;h3 id="upgrade-with-apt"&gt;&lt;code&gt;apt&lt;/code&gt; (Debian/Ubuntu)&lt;/h3&gt;
&lt;div class="card card-sm pageinfo pageinfo-warning my-4"&gt;
&lt;div class="card-body"&gt;
&lt;div class="card-text"&gt;
&lt;p&gt;If you configured the &lt;code&gt;apt&lt;/code&gt; repository by having followed the instructions for Falco 0.27.0 or older, you may need to update the repository URL, otherwise, &lt;strong&gt;feel free to ignore this message&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sed -i &lt;span style="color:#b44"&gt;&amp;#39;s,https://dl.bintray.com/falcosecurity/deb,https://download.falco.org/packages/deb,&amp;#39;&lt;/span&gt; /etc/apt/sources.list.d/falcosecurity.list
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;apt-get clean
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;apt-get -y update
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Check in the &lt;code&gt;apt-get update&lt;/code&gt; log that &lt;code&gt;https://download.falco.org/packages/deb&lt;/code&gt; is present.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;If you installed Falco by following the &lt;a href="https://v0-43--falcosecurity.netlify.app/docs/setup/packages/#install"&gt;provided instructions&lt;/a&gt;:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;apt-get --only-upgrade install falco
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="upgrade-with-yum"&gt;&lt;code&gt;yum&lt;/code&gt; (CentOS/RHEL/Fedora/Amazon Linux)&lt;/h3&gt;
&lt;div class="card card-sm pageinfo pageinfo-warning my-4"&gt;
&lt;div class="card-body"&gt;
&lt;div class="card-text"&gt;
&lt;p&gt;If you configured the &lt;code&gt;yum&lt;/code&gt; repository by having followed the instructions for Falco 0.27.0 or older, you may need to update the repository URL, otherwise, &lt;strong&gt;feel free to ignore this message&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo sed -i &lt;span style="color:#b44"&gt;&amp;#39;s,https://dl.bintray.com/falcosecurity/rpm,https://download.falco.org/packages/rpm,&amp;#39;&lt;/span&gt; /etc/yum.repos.d/falcosecurity.repo
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo yum clean all
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Then check that the &lt;code&gt;falcosecurity-rpm&lt;/code&gt; repository is pointing to &lt;code&gt;https://download.falco.org/packages/rpm/&lt;/code&gt;:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo sudo yum repolist -v falcosecurity-rpm
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;If you installed Falco by following the &lt;a href="https://v0-43--falcosecurity.netlify.app/docs/install-operate/installation/#centos-rhel"&gt;provided instructions&lt;/a&gt;:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Check for updates:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo yum check-update
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;If a newer Falco version is available:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo yum update falco
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id="upgrade-with-zypper"&gt;&lt;code&gt;zypper&lt;/code&gt; (openSUSE)&lt;/h3&gt;
&lt;div class="card card-sm pageinfo pageinfo-warning my-4"&gt;
&lt;div class="card-body"&gt;
&lt;div class="card-text"&gt;
&lt;p&gt;If you configured the &lt;code&gt;zypper&lt;/code&gt; repository by having followed the instructions for Falco 0.27.0 or older, you may need to update the repository URL, otherwise, &lt;strong&gt;feel free to ignore this message&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo sed -i &lt;span style="color:#b44"&gt;&amp;#39;s,https://dl.bintray.com/falcosecurity/rpm,https://download.falco.org/packages/rpm,&amp;#39;&lt;/span&gt; /etc/zypp/repos.d/falcosecurity.repo
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo zypper refresh
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Then check that the &lt;code&gt;falcosecurity-rpm&lt;/code&gt; repository is pointing to &lt;code&gt;https://download.falco.org/packages/rpm/&lt;/code&gt;:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo zypper lr falcosecurity-rpm
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;If you installed Falco by following the &lt;a href="https://v0-43--falcosecurity.netlify.app/docs/install-operate/installation/#suse"&gt;provided instructions&lt;/a&gt;:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo zypper update falco
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="kernel-upgrades"&gt;Kernel Upgrades&lt;/h3&gt;
&lt;p&gt;When performing kernel upgrades on your host, a reboot is required. When using a &lt;a class='glossary-tooltip' title='The eBPF probe (deprecated) collects syscall events from the Kernel, as the Kernel module does.' data-toggle='tooltip' data-placement='top' href='https://v0-43--falcosecurity.netlify.app/docs/concepts/event-sources/kernel/#legacy-ebpf-probe' target='_blank' aria-label='eBPF probe'&gt;eBPF probe&lt;/a&gt; or a &lt;a class='glossary-tooltip' title='The Kernel module collects syscalls events from the Kernel, as the modern eBPF probe does.' data-toggle='tooltip' data-placement='top' href='https://v0-43--falcosecurity.netlify.app/docs/concepts/event-sources/kernel/#kernel-module' target='_blank' aria-label='Kernel Module'&gt;Kernel Module&lt;/a&gt; driver, the Falco driver loader (i.e., &lt;code&gt;falcoctl driver&lt;/code&gt;) should be able to automatically find a pre-built driver (or build it on the fly) corresponding to the updated kernel release (&lt;code&gt;uname -r&lt;/code&gt;), making it easy to handle kernel upgrades. The Falco Project features a kernel crawler and automated CI, ensuring you can always obtain the necessary pre-built driver artifact, even for the latest kernel releases we support.&lt;/p&gt;
&lt;h2 id="uninstall"&gt;Uninstall&lt;/h2&gt;
&lt;h3 id="uninstall-with-apt"&gt;&lt;code&gt;apt&lt;/code&gt; (Debian/Ubuntu)&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo apt-get --purge autoremove falco
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="uninstall-with-yum"&gt;&lt;code&gt;yum&lt;/code&gt; (CentOS/RHEL/Fedora/Amazon Linux)&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo yum remove falco
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="uninstall-with-zypper"&gt;&lt;code&gt;zypper&lt;/code&gt; (openSUSE)&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo zypper remove falco
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="package-signing"&gt;Package signing&lt;/h2&gt;
&lt;div class="card card-sm pageinfo pageinfo-warning my-4"&gt;
&lt;div class="card-body"&gt;
&lt;div class="card-text"&gt;
&lt;p&gt;On December, 2025 we started rotating the GPG key used to sign Falco packages. Check out &lt;a href="https://v0-43--falcosecurity.netlify.app/blog/gpg-key-rotation-2026/"&gt;the related blog post&lt;/a&gt; and make sure you're using the most up-to-date key available at &lt;a href="https://falco.org/repo/falcosecurity-packages.asc"&gt;falco.org/repo/falcosecurity-packages.asc&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Most Falco packages available at &lt;a href="https://download.falco.org/?prefix=packages/"&gt;download.falco.org&lt;/a&gt; are provided with a detached signature that can be used to verify that the package information downloaded from the remote repository can be trusted.&lt;/p&gt;
&lt;p&gt;The &lt;strong&gt;latest trusted public GPG key&lt;/strong&gt; used for packages signing can be downloaded from &lt;a href="https://falco.org/repo/falcosecurity-packages.asc"&gt;falco.org/repo/falcosecurity-packages.asc&lt;/a&gt;. The following table lists all the keys employed by the organization currently and in the past, including the revoked ones. We recommend updating the revoked keys to download their revocation certificate, and eventually removing them from your package verification system due to the signature made with them not being trustable anymore.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;strong&gt;Fingerprint&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;Expiration&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;Usage&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;Status&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;Download&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;478B2FBBC75F4237B731DA4365106822B35B1B1F&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;2028-12-10&lt;/td&gt;
&lt;td&gt;Signing Falco Packages&lt;/td&gt;
&lt;td&gt;Trusted&lt;/td&gt;
&lt;td&gt;&lt;a href="https://v0-43--falcosecurity.netlify.app/repo/falcosecurity-B35B1B1F.asc"&gt;falcosecurity-B35B1B1F.asc&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;2005399002D5E8FF59F28CE64021833E14CB7A8D&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;2026-01-17&lt;/td&gt;
&lt;td&gt;Signing Falco Packages&lt;/td&gt;
&lt;td&gt;Revoked&lt;/td&gt;
&lt;td&gt;&lt;a href="https://v0-43--falcosecurity.netlify.app/repo/falcosecurity-14CB7A8D.asc"&gt;falcosecurity-14CB7A8D.asc&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;15ED05F191E40D74BA47109F9F76B25B3672BA8F&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;2023-02-24&lt;/td&gt;
&lt;td&gt;Signing Falco Packages&lt;/td&gt;
&lt;td&gt;Revoked&lt;/td&gt;
&lt;td&gt;&lt;a href="https://v0-43--falcosecurity.netlify.app/repo/falcosecurity-3672BA8F.asc"&gt;falcosecurity-3672BA8F.asc&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="troubleshooting"&gt;Troubleshooting&lt;/h2&gt;
&lt;p&gt;This section aims to offer further guidance when something doesn't go as expected in the installation of Falco.&lt;/p&gt;
&lt;h3 id="unable-to-find-prebuilt-driver"&gt;Unable to find a prebuilt driver&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;ERROR failed: unable to find a prebuilt driver&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This error message appears when the falcoctl driver loader tool, which looks for the Falco driver and loads it in memory, is not able to find a pre-built driver, neither as an eBPF probe nor as a kernel module, at the [Falco driver repository] (&lt;a href="https://download.falco.org"&gt;https://download.falco.org&lt;/a&gt;).&lt;/p&gt;
&lt;div class="card card-sm pageinfo pageinfo-info my-4"&gt;
&lt;div class="card-body"&gt;
&lt;div class="card-text"&gt;
&lt;p&gt;You can easily browse and search the supported targets at &lt;a href="https://download.falco.org/driver/site/index.html"&gt;download.falco.org/driver/site&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;This means that there's no prebuilt driver available for the kernel running on the machine where Falco is going to be installed.&lt;/p&gt;
&lt;p&gt;However, you can add your kernel release version to the &lt;a href="https://github.com/falcosecurity/test-infra/tree/master/driverkit/config"&gt;build grid&lt;/a&gt; the pipeline refers to building the drivers. Follow &lt;a href="https://v0-43--falcosecurity.netlify.app/docs/tutorials/add-prebuilt-driver-config/"&gt;this tutorial&lt;/a&gt; to contribute the required configuration.&lt;/p&gt;
&lt;div class="card card-sm pageinfo pageinfo-warning my-4"&gt;
&lt;div class="card-body"&gt;
&lt;div class="card-text"&gt;
&lt;p&gt;There are a limited set of Linux distributions whose kernels are supported by the current prebuilt driver distribution pipeline.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://github.com/falcosecurity/driverkit"&gt;driverkit&lt;/a&gt; is the tool used to build those drivers. Hence, it needs to support the specific Linux distribution. Find whether your Linux distribution is supported &lt;a href="https://github.com/falcosecurity/driverkit/tree/master/pkg/driverbuilder/builder"&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id="enable-bpf-jit-compiler"&gt;Enable the BPF JIT Compiler&lt;/h3&gt;
&lt;p&gt;If you are using the eBPF probe, in order to ensure that performance is not degraded, make sure that:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Your kernel has &lt;code&gt;CONFIG_BPF_JIT&lt;/code&gt; enabled&lt;/li&gt;
&lt;li&gt;&lt;code&gt;net.core.bpf_jit_enable&lt;/code&gt; is set to 1 (enable the BPF JIT Compiler)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This can be verified via &lt;code&gt;sysctl -n net.core.bpf_jit_enable&lt;/code&gt;.&lt;/p&gt;</description></item><item><title>Docs: Missing Fields in Falco Logs</title><link>https://v0-43--falcosecurity.netlify.app/docs/troubleshooting/missing-fields/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://v0-43--falcosecurity.netlify.app/docs/troubleshooting/missing-fields/</guid><description>
&lt;h2 id="action-items-tl-dr"&gt;Action Items (TL;DR)&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Read &lt;a href="https://v0-43--falcosecurity.netlify.app/docs/install-operate/"&gt;Install and Operate&lt;/a&gt; Guides and review &lt;a href="https://github.com/falcosecurity/falco/blob/master/falco.yaml"&gt;falco.yaml&lt;/a&gt; for necessary preconditions.&lt;/li&gt;
&lt;li&gt;Refer to the relevant debugging guide based on suspected missing fields.&lt;/li&gt;
&lt;li&gt;Acknowledge that certain missing fields or data in Falco are legitimate.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="background"&gt;Background&lt;/h2&gt;
&lt;p&gt;Many of the &lt;a href="https://v0-43--falcosecurity.netlify.app/docs/reference/rules/supported-fields/"&gt;Supported Output Fields&lt;/a&gt; are derived from multiple events and mechanisms. To provide a more concrete explanation, for each spawned process, Falco extracts and derives fields from the &lt;code&gt;clone*/*fork/execve*&lt;/code&gt; syscalls. Falco generates a struct in userspace, stores the relevant information within this struct, and then adds it to the process cache table in memory. If a process makes additional system calls during its lifetime, such as opening a file, in a Falco rule, you typically also export process fields — assuming we haven't missed the spawned process event and the information is available. These details extend to various use cases, and, in essence, dropped events can lead to missing fields as well as race conditions.&lt;/p&gt;
&lt;p&gt;As a result, Falco logs can never be perfect, and null values can occur. We are constantly aiming to improve the robustness in this regard. We encourage you to &lt;a href="https://v0-43--falcosecurity.netlify.app/docs/contribute/"&gt;contribute&lt;/a&gt; to the project if you encounter such cases or have improvement ideas. Also be aware that, unfortunately, missing fields can have different natures. Sometimes the field may be an empty string, or the string &lt;code&gt;&amp;lt;NA&amp;gt;&lt;/code&gt;, or, if numeric, the default numeric value. These inconsistencies may be more difficult to address, as many Falco rules rely on legacy declarations.&lt;/p&gt;
&lt;p&gt;Furthermore, sometimes Linux may not operate exactly as expected. One concrete example is that shell built-ins like &lt;code&gt;echo&lt;/code&gt; do not cause a new spawned process, and the &lt;code&gt;echo&lt;/code&gt; command does not get logged with Falco. Similarly, if a base64 encoded string gets interpreted during decoding, you do not have the original base64 blob in the command args unless the command was passed with the &lt;code&gt;sh -c&lt;/code&gt; flag. Lastly, some fields only work for certain kernel versions or system configs (e.g. &lt;a href="https://v0-43--falcosecurity.netlify.app/docs/reference/rules/supported-fields/#field-class-process"&gt;proc.is_exe_upper_layer&lt;/a&gt; requires a container overlayfs).&lt;/p&gt;
&lt;h2 id="missing-container-images"&gt;Missing Container Images&lt;/h2&gt;
&lt;p&gt;Check the basics:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Is the container runtime socket correctly mounted? For Kubernetes, mount with the &lt;code&gt;HOST_ROOT&lt;/code&gt; prefix: &lt;code&gt;/host/run/k3s/containerd/containerd.sock&lt;/code&gt;. See &lt;a href="https://github.com/falcosecurity/deploy-kubernetes/tree/main/kubernetes"&gt;deploy-kubernetes&lt;/a&gt; example template.&lt;/li&gt;
&lt;li&gt;Is a custom path specified for the container runtime socket in Kubernetes? If yes, use the &lt;code&gt;-o container_engines.cri.sockets[]=&amp;lt;socket_path&amp;gt;&lt;/code&gt; command line option when running Falco. The default paths include: &lt;code&gt;/run/containerd/containerd.sock&lt;/code&gt;, &lt;code&gt;/run/k3s/containerd/containerd.sock&lt;/code&gt;, &lt;code&gt;/run/crio/crio.sock&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;To expedite lookups, attempt to disable asynchronous CRI API calls by using the &lt;code&gt;-o container_engines.cri.disable_async=true&lt;/code&gt; command line option when running Falco.&lt;/li&gt;
&lt;li&gt;Falco monitors both host and container processes. If the &lt;code&gt;container.id&lt;/code&gt; is set to &lt;code&gt;host&lt;/code&gt;, it indicates that the process is running on the host, and therefore, no container image is associated with it.&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="card card-sm pageinfo pageinfo-info my-4"&gt;
&lt;div class="card-body"&gt;
&lt;div class="card-text"&gt;
&lt;p&gt;The &lt;code&gt;k8s.*&lt;/code&gt; fields are extracted from the container runtime socket simultaneously as we look up the &lt;code&gt;container.*&lt;/code&gt; fields from the CRI API calls responses.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id="using-cri-with-containerd"&gt;Using CRI with containerd&lt;/h3&gt;
&lt;p&gt;When using containerd as your container runtime, you should configure Falco to use the &lt;strong&gt;CRI engine&lt;/strong&gt; to consume the containerd socket (&lt;code&gt;/run/containerd/containerd.sock&lt;/code&gt;). This is important because:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The native containerd protocol does not support container &lt;strong&gt;names&lt;/strong&gt; - it only provides container IDs&lt;/li&gt;
&lt;li&gt;Containerd typically exposes two interfaces on the same socket: the native containerd protocol and the CRI (Container Runtime Interface) protocol&lt;/li&gt;
&lt;li&gt;The CRI protocol provides richer metadata, including container names&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If you are missing &lt;code&gt;container.name&lt;/code&gt; or other container metadata fields while using containerd, ensure you are using the CRI engine configuration (not the containerd engine) in your Falco setup. For example, configure the container plugin with:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;engines&lt;/span&gt;:&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;cri&lt;/span&gt;:&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;enabled&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;true&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;sockets&lt;/span&gt;:&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;- /run/containerd/containerd.sock&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;containerd&lt;/span&gt;:&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;enabled&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;false&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Carefully read the field description documentation:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Supported Output Fields &lt;a href="https://v0-43--falcosecurity.netlify.app/docs/reference/rules/supported-fields/#field-class-container"&gt;&lt;code&gt;container.*&lt;/code&gt;&lt;/a&gt; retrieved from the container runtime socket&lt;/li&gt;
&lt;li&gt;Supported Output Fields &lt;a href="https://v0-43--falcosecurity.netlify.app/docs/reference/rules/supported-fields/#field-class-k8s"&gt;&lt;code&gt;k8s.*&lt;/code&gt;&lt;/a&gt; also retrieved from the container runtime socket&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The container info enrichment, while robust, depends on the speed of making API requests against the container runtime socket.&lt;/p&gt;
&lt;p&gt;Falco's &lt;a href="https://github.com/falcosecurity/falco/blob/master/falco.yaml"&gt;metrics&lt;/a&gt; config (see also &lt;a href="https://v0-43--falcosecurity.netlify.app/docs/metrics/falco-metrics/"&gt;Falco Metrics&lt;/a&gt;) provides a range of useful metrics related to software functioning, now also featuring metrics around Falco's internal state:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;state_counters_enabled: true&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Here is an example metrics log snippet highlighting the fields crucial for this analysis.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;{&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;&amp;#34;output_fields&amp;#34;: &lt;/span&gt;{&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;&amp;#34;evt.source&amp;#34;: &lt;/span&gt;&lt;span style="color:#b44"&gt;&amp;#34;syscall&amp;#34;&lt;/span&gt;,&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;&amp;#34;falco.n_containers&amp;#34;: &lt;/span&gt;&lt;span style="color:#666"&gt;50&lt;/span&gt;,&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;&amp;#34;falco.n_missing_container_images&amp;#34;: &lt;/span&gt;&lt;span style="color:#666"&gt;0&lt;/span&gt;,&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;},&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;&amp;#34;rule&amp;#34;: &lt;/span&gt;&lt;span style="color:#b44"&gt;&amp;#34;Falco internal: metrics snapshot&amp;#34;&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;code&gt;falco.n_containers&lt;/code&gt; indicates how many containers are running at a given time, typically less than 100-300 at maximum. &lt;code&gt;falco.n_missing_container_images&lt;/code&gt; is an updated snapshot of how many containers are internally stored in Falco without a container image at any given time.&lt;/p&gt;
&lt;p&gt;To complicate matters, some processes in Kubernetes run in the pod sandbox container, which has no container image in the API responses. In such cases, the &lt;code&gt;container.id&lt;/code&gt; is the same as the &lt;code&gt;k8s.pod.sandbox_id&lt;/code&gt;. If the container image is consistently missing throughout the lifetime of the container, it's likely a process in a pod sandbox container in the majority of the cases. However, sandbox containers likely constitute less than 1% of the distinct containers in your overall Falco logs. Note that this comparison will be fully supported by Falco 0.38 and is a work in progress.&lt;/p&gt;
&lt;p&gt;Additionally, the improvement of the overall efficiency of the container engine, especially for the &lt;code&gt;-o container_engines.cri.disable_async=true&lt;/code&gt; option, is also a work in progress. A more performant implementation is expected to be available by Falco 0.38. This improvement aims to address missing images observed by adopters and resolve most cases, leaving only some edge cases of race conditions where the lookup hasn't happened yet.&lt;/p&gt;
&lt;h2 id="missing-user-names"&gt;Missing User Names&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Ensure proper mounts (e.g., &lt;code&gt;/etc:/host/etc&lt;/code&gt;) when running Falco as a daemonset in Kubernetes, for example.&lt;/li&gt;
&lt;li&gt;If you expect Falco to be aware of Kubernetes Control Plane users, especially when execing into a pod (&lt;code&gt;kubectl exec&lt;/code&gt;), we must disappoint you. The Linux kernel lacks knowledge of the control plane. However, we are actively exploring ways to support this. Refer to this &lt;a href="https://github.com/falcosecurity/falco/issues/2895"&gt;issue&lt;/a&gt; for more details.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="missing-process-tree-fields"&gt;Missing Process Tree Fields&lt;/h2&gt;
&lt;p&gt;Let's consider another example: the fields related to the process tree lineage (e.g. &lt;code&gt;proc.aname*&lt;/code&gt;).&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Falco adds processes to a cache in userspace when a new process starts and removes them when the process exits. The goal is to maintain a current view of running processes on the Linux host at any time. However, this also means that there are cases where the parent legitimately exits, re-parenting occurs, and/or PIDs get replaced or re-used.&lt;/li&gt;
&lt;li&gt;As a result, missing processes in the process ancestry (process tree) may be due to dropped or missed events, failure to store the event, or the process exiting without proper tracking of re-parenting or orphan process cases by Falco.&lt;/li&gt;
&lt;li&gt;Furthermore, a history of all &lt;code&gt;spawned_process&lt;/code&gt; events is not equivalent to the current process tree on the system. Check out the Falco &lt;a href="https://github.com/falcosecurity/rules/blob/main/rules/falco_rules.yaml"&gt;rules&lt;/a&gt; macro &lt;code&gt;container_entrypoint&lt;/code&gt; for one such example and explore this &lt;a href="https://www.win.tue.nl/~aeb/linux/lk/lk-10.html"&gt;resource&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;In summary, Falco aims to closely preserve the true system state, similar to the Linux kernel itself.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Falco's &lt;a href="https://github.com/falcosecurity/falco/blob/master/falco.yaml"&gt;metrics&lt;/a&gt; config (see also &lt;a href="https://v0-43--falcosecurity.netlify.app/docs/metrics/falco-metrics/"&gt;Falco Metrics&lt;/a&gt;) provides a range of useful metrics related to software functioning, now also featuring metrics around Falco's internal state:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;state_counters_enabled: true&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Here is an example metrics log snippet highlighting the fields crucial for this analysis.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;{&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;&amp;#34;output_fields&amp;#34;: &lt;/span&gt;{&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;&amp;#34;evt.source&amp;#34;: &lt;/span&gt;&lt;span style="color:#b44"&gt;&amp;#34;syscall&amp;#34;&lt;/span&gt;,&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;&amp;#34;falco.n_drops_full_threadtable&amp;#34;: &lt;/span&gt;&lt;span style="color:#666"&gt;0&lt;/span&gt;,&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;&amp;#34;falco.n_store_evts_drops&amp;#34;: &lt;/span&gt;&lt;span style="color:#666"&gt;0&lt;/span&gt;,&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;&amp;#34;falco.n_failed_fd_lookups&amp;#34;: &lt;/span&gt;&lt;span style="color:#666"&gt;0&lt;/span&gt;,&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;&amp;#34;falco.n_failed_thread_lookups&amp;#34;: &lt;/span&gt;&lt;span style="color:#666"&gt;0&lt;/span&gt;,&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;&amp;#34;falco.n_retrieve_evts_drops&amp;#34;: &lt;/span&gt;&lt;span style="color:#666"&gt;0&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;},&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;&amp;#34;rule&amp;#34;: &lt;/span&gt;&lt;span style="color:#b44"&gt;&amp;#34;Falco internal: metrics snapshot&amp;#34;&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;code&gt;falco.n_drops_full_threadtable&lt;/code&gt; and &lt;code&gt;falco.n_store_evts_drops&lt;/code&gt; reflect similar occurrences. They are monotonic counters indicating how often a spawned process event was dropped due to a full table (configurable by Falco 0.38 with a higher default value) and how frequently store actions to update the process structs in memory failed and were subsequently dropped. On the flip side, there are also counters keeping track of failed lookup or retrieve actions. Internally, Falco is granular and talks about &lt;code&gt;threads&lt;/code&gt;, not processes.&lt;/p&gt;
&lt;h3 id="references-and-community-discussions"&gt;References and Community Discussions&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/falcosecurity/falco/issues/2708"&gt;[TRACKING] Re-audit container engines for empty container info values (Initial focus on CRI for Kubernetes)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/falcosecurity/falco/issues/2895"&gt;[PROPOSAL] Inject Kubernetes Control Plane users into Falco syscalls logs for kubectl exec activities&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>Docs: How to register a plugin</title><link>https://v0-43--falcosecurity.netlify.app/docs/developer-guide/plugins/how-to-register/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://v0-43--falcosecurity.netlify.app/docs/developer-guide/plugins/how-to-register/</guid><description>
&lt;h2 id="plugin-registry"&gt;Plugin Registry&lt;/h2&gt;
&lt;p&gt;The &lt;a href="https://github.com/falcosecurity/plugins"&gt;registry&lt;/a&gt; is a GitHub repository that provides metadata and information about all plugins recognized by The Falco Project. It includes plugins hosted within this repository as well as those located in other repositories. These plugins are developed for Falco and shared with the community.&lt;/p&gt;
&lt;h2 id="registering-your-plugin"&gt;Registering your plugin&lt;/h2&gt;
&lt;p&gt;In this section, we’ll outline the key steps to get your plugin registered successfully.&lt;/p&gt;
&lt;p&gt;To complete the registration process, you’ll need to:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Create a clear and well-structured &lt;strong&gt;README&lt;/strong&gt; for your plugin.&lt;/li&gt;
&lt;li&gt;Fill in all the required fields in the &lt;code&gt;plugins&lt;/code&gt; section of the &lt;a href="https://github.com/falcosecurity/plugins/blob/master/registry.yaml"&gt;registry.yaml&lt;/a&gt; file, like in the below example.&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;plugins&lt;/span&gt;:&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;source&lt;/span&gt;:&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;- &lt;span style="color:#008000;font-weight:bold"&gt;id&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#666"&gt;2&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;source&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;aws_cloudtrail&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;name&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;cloudtrail&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;description&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;Reads Cloudtrail JSON logs from files/S3 and injects as events&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;authors&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;The Falco Authors&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;contact&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;https://falco.org/community&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;url&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;https://github.com/falcosecurity/plugins/tree/master/plugins/cloudtrail&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;license&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;Apache-2.0&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="license"&gt;License&lt;/h3&gt;
&lt;p&gt;You're free to choose the open source license you want, you can check &lt;a href="https://choosealicense.com/"&gt;https://choosealicense.com/&lt;/a&gt; for help. Most of the current plugins are under Apache License 2.0.&lt;/p&gt;
&lt;h3 id="id"&gt;ID&lt;/h3&gt;
&lt;p&gt;Every source plugin requires its own unique plugin event &lt;code&gt;ID&lt;/code&gt; to interoperate with &lt;code&gt;Falco&lt;/code&gt; and the other plugins. This &lt;code&gt;ID&lt;/code&gt; is used in the following ways:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;It is stored inside in-memory event objects and used to identify the associated plugin that injected the event.&lt;/li&gt;
&lt;li&gt;It is stored in capture files and used to recreate in-memory event objects when reading capture files.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;It must be unique to ensure that events written by a given plugin will be properly associated with that plugin (and its event sources, see below).&lt;/p&gt;
&lt;h3 id="name"&gt;Name&lt;/h3&gt;
&lt;p&gt;Each plugin in the registry must have its own &lt;code&gt;name&lt;/code&gt; and can be different from &lt;code&gt;event source&lt;/code&gt;, which can be shared across multiple plugins (e.g., for k8s audit logs, there might be several plugins but only one type of &lt;code&gt;event source&lt;/code&gt;).&lt;/p&gt;
&lt;p&gt;The &lt;code&gt;name&lt;/code&gt; should match this regular expression &lt;code&gt;^[a-z]+[a-z0-9_]*$&lt;/code&gt;.&lt;/p&gt;
&lt;h3 id="fields"&gt;Fields&lt;/h3&gt;
&lt;p&gt;The &lt;code&gt;fields&lt;/code&gt; are used for conditions in rules. Describe the available fields of your plugin in the README.&lt;/p&gt;
&lt;p&gt;For example:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Name&lt;/th&gt;
&lt;th&gt;Type&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;docker.status&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;string&lt;/td&gt;
&lt;td&gt;Status of the event&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;docker.id&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;string&lt;/td&gt;
&lt;td&gt;ID of the event&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;docker.from&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;string&lt;/td&gt;
&lt;td&gt;From of the event (deprecated)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;docker.type&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;string&lt;/td&gt;
&lt;td&gt;Type of the event&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;docker.action&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;string&lt;/td&gt;
&lt;td&gt;Action of the event&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;docker.stack.namespace&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;string&lt;/td&gt;
&lt;td&gt;Stack Namespace&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="propose-your-plugin"&gt;Propose your Plugin&lt;/h3&gt;
&lt;p&gt;Once you're ready, follow these steps to submit your plugin for registration:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Fork&lt;/strong&gt; the &lt;a href="https://github.com/falcosecurity/plugins"&gt;falcosecurity/plugins repository&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Update&lt;/strong&gt; the &lt;a href="https://github.com/falcosecurity/plugins/edit/master/registry.yaml"&gt;&lt;code&gt;registry.yaml&lt;/code&gt;&lt;/a&gt; file by adding your plugin to the &lt;code&gt;plugins&lt;/code&gt; section.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Make sure to follow our &lt;a href="https://github.com/falcosecurity/.github/blob/master/CONTRIBUTING.md"&gt;Contributing Guide&lt;/a&gt;&lt;/strong&gt;, e.g. all commits must be &lt;strong&gt;signed-off&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Submit a Pull Request (PR)&lt;/strong&gt; to the &lt;a href="https://github.com/falcosecurity/plugins"&gt;falcosecurity/plugins repository&lt;/a&gt;.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;For more details, check out the &lt;a href="https://github.com/falcosecurity/plugins#registering-a-new-plugin"&gt;plugin registration documentation&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>Docs: Try Falco on Linux</title><link>https://v0-43--falcosecurity.netlify.app/docs/getting-started/falco-linux-quickstart/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://v0-43--falcosecurity.netlify.app/docs/getting-started/falco-linux-quickstart/</guid><description>
&lt;p&gt;In this scenario, you will learn how to install Falco on an Ubuntu host, trigger a Falco rule by generating a suspicious event, and then examine the output.&lt;/p&gt;
&lt;p&gt;This activity aims to give you a quick example of how Falco works. After you complete it, you should be able to move on to &lt;a href="https://v0-43--falcosecurity.netlify.app/docs/getting-started/falco-kubernetes-quickstart/"&gt;trying Falco on Kubernetes&lt;/a&gt; or spend some time reading some &lt;a href="https://v0-43--falcosecurity.netlify.app/docs/getting-started/falco-additional"&gt;additional resources&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id="prerequisites"&gt;Prerequisites&lt;/h2&gt;
&lt;p&gt;This lab is based on installing Falco on a virtual machine.&lt;/p&gt;
&lt;p&gt;The scenario has been tested using VirtualBox and Lima (for MacBooks running Apple Silicon).&lt;/p&gt;
&lt;p&gt;While this tutorial may work with Ubuntu running on a cloud provider or another virtualization platform, it has not been tested.&lt;/p&gt;
&lt;h3 id="virtualbox-setup"&gt;VirtualBox setup&lt;/h3&gt;
&lt;p&gt;The following steps will set up a VirtualBox virtual machine running Ubuntu 24.04.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Install VirtualBox and Vagrant according to the instructions appropriate for your local system.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Issue the following commands from the command line to create an Ubuntu 24.04 virtual machine.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;vagrant init bento/ubuntu-24.04
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;vagrant up
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ul&gt;
&lt;li&gt;Log into the newly launched virtual machine and continue to the &lt;em&gt;Install Falco&lt;/em&gt; section below (the default password is &lt;em&gt;vagrant&lt;/em&gt;).&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;vagrant ssh
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="lima-setup-for-apple-silicon-m1-m2"&gt;Lima setup for Apple silicon (M1/M2)&lt;/h3&gt;
&lt;p&gt;This section explains how to create an Ubuntu 24.04 VM on Apple computers running M1 silicon (as opposed to Intel).&lt;/p&gt;
&lt;p&gt;If you are unsure what processor your Apple machine is running, you can find out by clicking the Apple icon in the upper left and choosing &amp;quot;About this Mac&amp;quot;. The first item listed, Chip, tells you what silicon you're running on.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Install Homebrew according to the project's documentation.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Use Homebrew to install Lima.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;brew install lima
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ul&gt;
&lt;li&gt;Create an Ubuntu 24.04 VM with Lima.&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;limactl start --name&lt;span style="color:#666"&gt;=&lt;/span&gt;falco-quickstart template://ubuntu-lts
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ul&gt;
&lt;li&gt;Shell into the Ubuntu VM, and once you're in the VM, continue to the Install Falco section.&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;limactl shell falco-quickstart
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="install-falco"&gt;Install Falco&lt;/h2&gt;
&lt;p&gt;Regardless of which setup you used above, this section will show you how to install Falco on a host system. You'll begin by updating the package repository. Next, you'll install the dialog package. Then you'll install Falco and ensure it's up and running.&lt;/p&gt;
&lt;h3 id="set-up-the-package-repository"&gt;Set up the package repository&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Add the Falco repository key.&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;curl -fsSL https://falco.org/repo/falcosecurity-packages.asc | &lt;span style="color:#b62;font-weight:bold"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo gpg --dearmor -o /usr/share/keyrings/falco-archive-keyring.gpg
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ul&gt;
&lt;li&gt;Add the Falco repository.&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo bash -c &lt;span style="color:#b44"&gt;&amp;#39;cat &amp;lt;&amp;lt; EOF &amp;gt; /etc/apt/sources.list.d/falcosecurity.list
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#b44"&gt;deb [signed-by=/usr/share/keyrings/falco-archive-keyring.gpg] https://download.falco.org/packages/deb stable main
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#b44"&gt;EOF&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ul&gt;
&lt;li&gt;Read the repository contents.&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo apt-get update -y
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="install-dialog"&gt;Install dialog&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Install &lt;em&gt;dialog&lt;/em&gt;, which is used by the Falco installer.&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo apt-get install -y dialog
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="install-falco-1"&gt;Install Falco&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Install the latest Falco version.&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo apt-get install -y falco
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;When prompted, choose the &lt;strong&gt;Modern eBPF&lt;/strong&gt; option. This will enable the usage of the modern eBPF-based driver.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://v0-43--falcosecurity.netlify.app/docs/getting-started/images/dialog-1.png" alt="Dialog window - Choose the modern eBPF driver" loading="lazy" /&gt;
&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;When prompted, choose &lt;strong&gt;Yes&lt;/strong&gt;. Although we won't use the functionality in this exercise, this option allows Falco to update its rules automatically.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://v0-43--falcosecurity.netlify.app/docs/getting-started/images/dialog-2.png" alt="Dialog window - Choose the follow automatic ruleset updates" loading="lazy" /&gt;
&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Wait for the Falco installation to complete - this should only take a few minutes.&lt;/p&gt;
&lt;h3 id="verify-falco-is-running"&gt;Verify Falco is running&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Make sure the Falco service is running.&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo systemctl status falco-modern-bpf.service
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The output should be similar to the following:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-plain" data-lang="plain"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;● falco-modern-bpf.service - Falco: Container Native Runtime Security with modern ebpf
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; Loaded: loaded (/usr/lib/systemd/system/falco-modern-bpf.service; enabled; preset: enabled)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; Active: active (running) since Wed 2024-09-18 08:40:04 UTC; 11min ago
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; Docs: https://falco.org/docs/
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; Main PID: 4751 (falco)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; Tasks: 7 (limit: 2275)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; Memory: 24.7M (peak: 37.1M)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; CPU: 3.913s
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; CGroup: /system.slice/falco-modern-bpf.service
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; └─4751 /usr/bin/falco -o engine.kind=modern_ebpf
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Sep 18 08:40:12 vagrant falco[4751]: /etc/falco/falco.yaml
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Sep 18 08:40:12 vagrant falco[4751]: System info: Linux version 6.8.0-31-generic (buildd@lcy02-amd64-080) (x86_64-linux-gnu-gcc-13 (Ubuntu 13.2.0-23ubuntu4) 13.2.0, GNU ld (GNU Binutils for Ubuntu) 2.42) #31-Ubuntu SMP PREEMPT_DYNAMIC Sat Apr 20 00:40:06 UTC 2024
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Sep 18 08:40:12 vagrant falco[4751]: Loading rules from file /etc/falco/falco_rules.yaml
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Sep 18 08:40:12 vagrant falco[4751]: Loading rules from file /etc/falco/falco_rules.local.yaml
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Sep 18 08:40:12 vagrant falco[4751]: The chosen syscall buffer dimension is: 8388608 bytes (8 MBs)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Sep 18 08:40:12 vagrant falco[4751]: Starting health webserver with threadiness 2, listening on 0.0.0.0:8765
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Sep 18 08:40:12 vagrant falco[4751]: Loaded event sources: syscall
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Sep 18 08:40:12 vagrant falco[4751]: Enabled event sources: syscall
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Sep 18 08:40:12 vagrant falco[4751]: Opening &amp;#39;syscall&amp;#39; source with modern BPF probe.
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Sep 18 08:40:12 vagrant falco[4751]: One ring buffer every &amp;#39;2&amp;#39; CPUs.
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="see-falco-in-action"&gt;See Falco in action&lt;/h2&gt;
&lt;h3 id="generate-a-suspicious-event"&gt;Generate a suspicious event&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;There is a Falco rule that is designed to trigger whenever someone accesses a sensitive file (of which, /etc/shadow is one). Run the following command to trigger that rule.&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo cat /etc/shadow &amp;gt; /dev/null
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="examine-falco-s-output"&gt;Examine Falco's output&lt;/h3&gt;
&lt;p&gt;One of the endpoints that Falco can write output to is &lt;em&gt;syslog&lt;/em&gt;. There are multiple ways to examine the system logs, but we have featured two for our exercise: using &lt;em&gt;journalctl&lt;/em&gt; and simply using &lt;em&gt;cat&lt;/em&gt; on the log file.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&lt;strong&gt;Using journalctl&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Run the following command to retrieve Falco messages that have been generated with a priority of &lt;code&gt;warning&lt;/code&gt;:&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo journalctl &lt;span style="color:#b8860b"&gt;_COMM&lt;/span&gt;&lt;span style="color:#666"&gt;=&lt;/span&gt;falco -p warning
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;You should see output similar to the following:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-plain" data-lang="plain"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;...
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Sep 18 12:50:52 vagrant falco[4751]: 11:48:24.195279773: Warning Sensitive file opened for
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;reading by non-trusted program (file=/etc/shadow gparent=sudo ggparent=bash gggparent=sshd
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;evt_type=openat user=root user_uid=0 user_loginuid=1000 process=cat proc_exepath=/usr/bin/cat
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;parent=sudo command=cat /etc/shadow terminal=34818 container_id=host container_name=host)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;...
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;em&gt;&lt;strong&gt;Using /var/log/syslog&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Log messages describing Falco's activity are logged to syslog. Run the following command to retrieve Falco logs:&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo grep Sensitive /var/log/syslog
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;You should see output similar to the following:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-plain" data-lang="plain"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;...
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;2024-09-18T12:50:52.164570+00:00 vagrant falco: 11:48:24.195279773: Warning Sensitive file opened for
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;reading by non-trusted program (file=/etc/shadow gparent=sudo ggparent=bash gggparent=sshd
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;evt_type=openat user=root user_uid=0 user_loginuid=1000 process=cat proc_exepath=/usr/bin/cat
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;parent=sudo command=cat /etc/shadow terminal=34818 container_id=host container_name=host)
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="cleanup"&gt;Cleanup&lt;/h2&gt;
&lt;h3 id="remove-the-lima-virtual-machine"&gt;Remove the Lima virtual machine&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;If you wish, remove the Lima virtual machine&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;limactl delete falco-quickstart --force
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="remove-the-virtualbox-virtual-machine"&gt;Remove the Virtualbox virtual machine&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;If you wish, remove the Virtualbox virtual machine&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;vagrant destroy
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="card card-sm pageinfo pageinfo-info my-4"&gt;
&lt;div class="card-body"&gt;
&lt;div class="card-text"&gt;
&lt;p&gt;Be sure you are in same subdirectory as the Vagrantfile&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;</description></item><item><title>Docs: Condition Syntax</title><link>https://v0-43--falcosecurity.netlify.app/docs/concepts/rules/conditions/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://v0-43--falcosecurity.netlify.app/docs/concepts/rules/conditions/</guid><description>
&lt;p&gt;A Falco rule’s condition defines the filter that determines which events are &lt;a class='glossary-tooltip' title='Identify a suspicious event or behavior.' data-toggle='tooltip' data-placement='top' href='https://v0-43--falcosecurity.netlify.app/docs/reference/glossary/?all=true#term-detection' target='_blank' aria-label='detected'&gt;detected&lt;/a&gt; by the rule. This condition is a boolean expression that evaluates to &lt;em&gt;true&lt;/em&gt; or &lt;em&gt;false&lt;/em&gt; for each event. If it evaluates to &lt;em&gt;true&lt;/em&gt;, the rule triggers and generates an &lt;a class='glossary-tooltip' title='Downstream actions executed after a rule is triggered.' data-toggle='tooltip' data-placement='top' href='https://v0-43--falcosecurity.netlify.app/docs/outputs/' target='_blank' aria-label='alert'&gt;alert&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;A condition can be viewed as a sequence of comparisons, each joined by &lt;a href="https://v0-43--falcosecurity.netlify.app/docs/concepts/rules/conditions/#logical-operators"&gt;logical operators&lt;/a&gt;. Parentheses can be used to define precedence. Each comparison uses a &lt;a href="https://v0-43--falcosecurity.netlify.app/docs/concepts/rules/conditions/#comparison-operators"&gt;comparison operator&lt;/a&gt; between a field (on the left side), extracted from the input event, and a static or computed value (on the right side). You can also apply &lt;a href="https://v0-43--falcosecurity.netlify.app/docs/concepts/rules/conditions/#transformers"&gt;transformers&lt;/a&gt; to the field to modify its extracted values before comparison.&lt;/p&gt;
&lt;p&gt;The set of &lt;a class='glossary-tooltip' title='Filters available as rules condition or output.' data-toggle='tooltip' data-placement='top' href='https://v0-43--falcosecurity.netlify.app/docs/reference/rules/rule-fields' target='_blank' aria-label='fields'&gt;fields&lt;/a&gt; available depends on the data source. For simplicity, this page focuses on &lt;a class='glossary-tooltip' title='Syscalls stands for system calls, a way to request a service from the running kernel.' data-toggle='tooltip' data-placement='top' href='https://man7.org/linux/man-pages/man2/syscalls.2.html' target='_blank' aria-label='syscalls'&gt;syscalls&lt;/a&gt;, as they are among the most common.&lt;/p&gt;
&lt;p&gt;For example, the following condition triggers for each execution of &lt;code&gt;cat&lt;/code&gt; or &lt;code&gt;grep&lt;/code&gt;:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;evt.type = execve and (proc.name = cat or proc.name = grep)
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id="operators"&gt;Operators&lt;/h2&gt;
&lt;p&gt;You can use the below operators in Falco rule conditions.&lt;/p&gt;
&lt;h3 id="logical-operators"&gt;Logical operators&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style="text-align: left"&gt;Operators&lt;/th&gt;
&lt;th style="text-align: left"&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;and&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;Logical AND operator to connect two or more comparisons (ie. &lt;code&gt;evt.type = open and fd.typechar='f'&lt;/code&gt;).&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;or&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;Logical OR operator to connect two or more comparisons (ie. &lt;code&gt;proc.name = bash or proc.name = zsh&lt;/code&gt;).&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;not&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;Logical NOT operator to negate a comparison (ie. &lt;code&gt;not proc.name = bash&lt;/code&gt;).&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="comparison-operators"&gt;Comparison operators&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style="text-align: left"&gt;Operators&lt;/th&gt;
&lt;th style="text-align: left"&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;=&lt;/code&gt;, &lt;code&gt;!=&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;Equality and inequality operators.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;=&lt;/code&gt;, &lt;code&gt;&amp;lt;&lt;/code&gt;, &lt;code&gt;&amp;gt;=&lt;/code&gt;, &lt;code&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;Comparison operators for numeric values.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;contains&lt;/code&gt;, &lt;code&gt;bcontains&lt;/code&gt;, &lt;code&gt;icontains&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;Strings are evaluated to be true if a string contains another. For flags, &lt;code&gt;contains&lt;/code&gt; evaluates to true if the specified flag is set. For example: &lt;code&gt;proc.cmdline contains &amp;quot;-jar&amp;quot;&lt;/code&gt;, &lt;code&gt;evt.arg.flags contains O_TRUNC&lt;/code&gt;. The &lt;code&gt;icontains&lt;/code&gt; variant works similarly but is case-insensitive. The &lt;code&gt;bcontains&lt;/code&gt; variant allows byte matching against a raw string of bytes, taking a hexadecimal string as input. For example: &lt;code&gt;evt.buffer bcontains CAFEBABE&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;endswith&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;Checks if a string ends with a given suffix.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;exists&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;Checks whether a field is set. Example: &lt;code&gt;k8s.pod.name exists&lt;/code&gt;.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;glob&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;Evaluates standard glob patterns. Example: &lt;code&gt;fd.name glob &amp;quot;/home/*/.ssh/*&amp;quot;&lt;/code&gt;.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;in&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;Evaluates whether the first set is completely contained in the second set. Example: &lt;code&gt;(b,c,d) in (a,b,c)&lt;/code&gt; is &lt;code&gt;FALSE&lt;/code&gt; because &lt;code&gt;d&lt;/code&gt; is not found in &lt;code&gt;(a,b,c)&lt;/code&gt;.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;intersects&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;Evaluates whether the first set has at least one element in common with the second set. Example: &lt;code&gt;(b,c,d) intersects (a,b,c)&lt;/code&gt; is &lt;code&gt;TRUE&lt;/code&gt; because both sets contain &lt;code&gt;b&lt;/code&gt; and &lt;code&gt;c&lt;/code&gt;.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;pmatch&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;Compares a file path against a set of file or directory prefixes. Example: &lt;code&gt;fd.name pmatch (/tmp/hello)&lt;/code&gt; evaluates to true for &lt;code&gt;/tmp/hello&lt;/code&gt;, &lt;code&gt;/tmp/hello/world&lt;/code&gt; but not &lt;code&gt;/tmp/hello_world&lt;/code&gt;. More details in the &lt;a href="https://v0-43--falcosecurity.netlify.app/docs/concepts/rules/conditions/#pmatch-operator"&gt;below section&lt;/a&gt;.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;regex&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;Checks whether a string field matches a regular expression. The regex engine is &lt;a href="https://github.com/google/re2/wiki/Syntax"&gt;Google RE2&lt;/a&gt; configured in POSIX mode, which restricts patterns to POSIX extended (egrep) syntax (backreferences are not supported). Note that &lt;code&gt;regex&lt;/code&gt; can be considerably slower than simpler string operations. The &lt;code&gt;regex&lt;/code&gt; operator performs a full match only, not a partial match (i.e., anchored to both the beginning and the end). Example: &lt;code&gt;fd.name regex '[a-z]*/proc/[0-9]+/cmdline'&lt;/code&gt;.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;startswith&lt;/code&gt;, &lt;code&gt;bstartswith&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;Checks if a string starts with a given prefix. The &lt;code&gt;bstartswith&lt;/code&gt; variant allows byte matching against a raw string of bytes, taking a hexadecimal string as input. For example: &lt;code&gt;evt.buffer bstartswith 012AB3CC&lt;/code&gt;.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h4 id="pmatch-operator"&gt;&lt;code&gt;pmatch&lt;/code&gt; operator&lt;/h4&gt;
&lt;p&gt;&lt;code&gt;pmatch&lt;/code&gt; checks if any given path prefix matches a filesystem path in Falco fields like &lt;code&gt;fd.name&lt;/code&gt;, &lt;code&gt;evt.rawarg.path&lt;/code&gt;, or &lt;code&gt;fs.path.name&lt;/code&gt;. For example:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;fd.name pmatch (/var/run, /var/spool, /etc, /boot)
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;If &lt;code&gt;fd.name&lt;/code&gt; is &lt;code&gt;/var/spool/maillog&lt;/code&gt;, this expression is true; if it is &lt;code&gt;/opt/data/file.txt&lt;/code&gt;, it is false. Internally, &lt;code&gt;pmatch&lt;/code&gt; builds a tree-like structure from the right-hand side paths and traverses it with the left-hand side path components, returning true at the first matching leaf.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;pmatch&lt;/code&gt; can also include glob wildcards:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;fd.name pmatch (/var/*/*.txt, /etc, /boot)
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;This still performs a prefix match. Unlike &lt;code&gt;glob&lt;/code&gt;, which must fully match the path, &lt;code&gt;pmatch&lt;/code&gt; succeeds if the path starts with one of the specified prefixes. Hence, &lt;code&gt;fd.name pmatch (/var/*)&lt;/code&gt; matches &lt;code&gt;/var/run/file.txt&lt;/code&gt;, while &lt;code&gt;fd.name glob /var/*&lt;/code&gt; does not. Wildcards do not cross directory separators (see &lt;a href="https://man7.org/linux/man-pages/man7/glob.7.html"&gt;glob.7&lt;/a&gt;).&lt;/p&gt;
&lt;h2 id="transformers"&gt;Transformers&lt;/h2&gt;
&lt;p&gt;Falco supports basic transformations on fields within rule conditions. For instance, if you want to check for a case-insensitive process name, you can use:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;tolower(proc.name) = bash
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;The following transform operators are supported:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style="text-align: left"&gt;Transformer&lt;/th&gt;
&lt;th style="text-align: left"&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;tolower(&amp;lt;field&amp;gt;)&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;Converts the input field to lowercase.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;toupper(&amp;lt;field&amp;gt;)&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;Converts the input field to uppercase.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;b64(&amp;lt;field&amp;gt;)&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;Decodes the input field from &lt;a href="https://en.wikipedia.org/wiki/Base64"&gt;Base64&lt;/a&gt;.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;basename(&amp;lt;field&amp;gt;)&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;Extracts the filename without its directory path from the input field. Unlike the Unix &lt;code&gt;basename&lt;/code&gt; program, &lt;code&gt;basename()&lt;/code&gt; in Falco returns &lt;code&gt;&amp;quot;&amp;quot;&lt;/code&gt; if no filename is present. For example, &lt;code&gt;basename(proc.exepath)&lt;/code&gt; is &lt;code&gt;&amp;quot;cat&amp;quot;&lt;/code&gt; for &lt;code&gt;/usr/bin/cat&lt;/code&gt; but &lt;code&gt;&amp;quot;&amp;quot;&lt;/code&gt; for &lt;code&gt;/usr/bin/&lt;/code&gt;.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;len(&amp;lt;field&amp;gt;)&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;Returns the length of the field: for LIST fields, the number of elements; for CHARBUF fields, the number of characters; and for BYTEBUF fields, the number of bytes.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="field-evaluation-for-right-hand-side-of-comparisons"&gt;Field evaluation (for right-hand side of comparisons)&lt;/h3&gt;
&lt;p&gt;Falco also lets you compare field values with other field values by using the &lt;code&gt;val()&lt;/code&gt; special transformer on the right-hand side of a comparison. For instance, to detect processes that have the same name as their parent:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;proc.name = val(proc.pname)
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Similarly, using transformations on both sides is supported:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;tolower(proc.name) = tolower(proc.pname)
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id="syscall-event-types-direction-and-args"&gt;Syscall event types, direction, and args&lt;/h2&gt;
&lt;div class="card card-sm pageinfo pageinfo-warning my-4"&gt;
&lt;div class="card-body"&gt;
&lt;div class="card-text"&gt;
&lt;p&gt;The &lt;code&gt;evt.dir&lt;/code&gt; field, as well as the concept of &amp;quot;direction&amp;quot;, have been deprecated in Falco &lt;code&gt;0.42.0&lt;/code&gt; and will be removed
in a future release. Until field removal and since Falco &lt;code&gt;0.42.0&lt;/code&gt;, specifying &lt;code&gt;evt.dir='&amp;gt;'&lt;/code&gt; will match nothing, while
specifying &lt;code&gt;evt.dir='&amp;lt;'&lt;/code&gt; will match everything, with a warning informing the user about the deprecation. Users are
encouraged to get rid of any reference to &lt;code&gt;evt.dir&lt;/code&gt;, as its presence will result in an error at rules loading time after
its removal.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Every syscall event includes the &lt;a href="https://v0-43--falcosecurity.netlify.app/docs/reference/rules/supported-fields/#field-class-evt"&gt;&lt;code&gt;evt&lt;/code&gt; field class&lt;/a&gt;. Each condition you write for these events typically begins with an &lt;code&gt;evt.type&lt;/code&gt; expression or macro. This is practical because security rules often focus on one syscall type at a time. For instance, you might consider &lt;code&gt;open&lt;/code&gt; or &lt;code&gt;openat&lt;/code&gt; to detect suspicious activity when files are opened, or &lt;code&gt;execve&lt;/code&gt; to inspect newly spawned processes. You do not have to guess the syscall name—simply refer to the complete &lt;a href="https://v0-43--falcosecurity.netlify.app/docs/reference/rules/supported-fields/"&gt;list of supported system call events&lt;/a&gt; for an overview of what you can use.&lt;/p&gt;
&lt;p&gt;Each syscall has an entry event and an exit event, tracked by the &lt;code&gt;evt.dir&lt;/code&gt; field, also referred to as the &amp;quot;direction&amp;quot; of the system call. A value of &lt;code&gt;&amp;gt;&lt;/code&gt; indicates entry (when the syscall is invoked), while &lt;code&gt;&amp;lt;&lt;/code&gt; marks exit (when the call has returned). By looking at the supported system call list, you will see that events have both entry and exit forms. For example:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;&amp;gt; setuid(UID uid)
&amp;lt; setuid(ERRNO res)
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;In many cases, it is most useful to filter on exit events, because you want to know the outcome of the syscall once it has completed. For example, consider the file-opening events:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;&amp;gt; open()
&amp;lt; open(FD fd, FSPATH name, FLAGS32 flags, UINT32 mode, UINT32 dev)
&amp;gt; openat()
&amp;lt; openat(FD fd, FD dirfd, FSRELPATH name, FLAGS32 flags, UINT32 mode, UINT32 dev)
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Each event has a list of arguments that you can access through &lt;code&gt;evt.arg.&amp;lt;argname&amp;gt;&lt;/code&gt;. For instance, if you want to detect a process opening a file to overwrite it, check if the list of flags contains &lt;code&gt;O_TRUNC&lt;/code&gt;:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;evt.type in (open, openat) and evt.dir = &amp;lt; and evt.arg.flags contains O_TRUNC
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Note that arguments do not necessarily match the raw parameters used in the Linux kernel; Falco may parse them in ways that make rule-writing more straightforward. By using the &lt;a href="https://v0-43--falcosecurity.netlify.app/docs/rules/supported-fields/#field-class-evt"&gt;&lt;code&gt;evt&lt;/code&gt; fields&lt;/a&gt;, you can inspect many other aspects common across different events.&lt;/p&gt;
&lt;h2 id="syscall-event-context-and-metadata"&gt;Syscall event context and metadata&lt;/h2&gt;
&lt;p&gt;While the &lt;code&gt;evt&lt;/code&gt; fields allow you to write expressive conditions, arguments and common fields alone are often insufficient for complete security rules. You might also need to consider the process context in which the event occurred, whether or not it happened inside a container, or how it correlates with Kubernetes metadata. To enable this, Falco enriches many events with &lt;a href="https://v0-43--falcosecurity.netlify.app/docs/rules/supported-fields"&gt;additional field classes&lt;/a&gt;. Not all field classes are available for all events, and the list grows over time. Each field class’s documentation clarifies when those fields are expected to be present, but some are so common that rules often rely on them.&lt;/p&gt;
&lt;p&gt;The &lt;a href="https://v0-43--falcosecurity.netlify.app/docs/rules/supported-fields/#field-class-process"&gt;&lt;code&gt;proc&lt;/code&gt; field class&lt;/a&gt; gives you context about the process and thread generating a specific syscall. This information is frequently very important. For example, you can use &lt;code&gt;proc.name&lt;/code&gt; and &lt;code&gt;proc.pid&lt;/code&gt;, or even traverse the process hierarchy with &lt;code&gt;proc.aname[&amp;lt;n&amp;gt;]&lt;/code&gt; and &lt;code&gt;proc.apid[&amp;lt;n&amp;gt;]&lt;/code&gt;. You can also see which user performed the action with the &lt;code&gt;user&lt;/code&gt; field class.&lt;/p&gt;
&lt;p&gt;An example rule that detects whenever &lt;code&gt;bash&lt;/code&gt; is executed inside a container could look like this:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;evt.type = execve and container.id != host and proc.name = bash
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Notice that you do not need to check the &lt;code&gt;execve&lt;/code&gt; arguments. Once &lt;code&gt;execve&lt;/code&gt; has returned, Falco updates the process context, so all &lt;code&gt;proc.*&lt;/code&gt; fields refer to the new process that was just spawned, including command line, executable path, arguments, and so on.&lt;/p&gt;</description></item><item><title>Docs: Falco Configuration Options</title><link>https://v0-43--falcosecurity.netlify.app/docs/reference/daemon/config-options/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://v0-43--falcosecurity.netlify.app/docs/reference/daemon/config-options/</guid><description>
&lt;p&gt;Falco's configuration file is a YAML file containing a collection of &lt;code&gt;key: value&lt;/code&gt; or &lt;code&gt;key: [value list]&lt;/code&gt; pairs. Depending on your installation type the configuration file could be located in &lt;code&gt;/etc/falco/falco.yaml&lt;/code&gt; or loaded as a configmap in Kubernetes deployments.&lt;/p&gt;
&lt;p&gt;The full list of configuration items is documented in the file itself that you can find in your Falco distribution or in the &lt;a href="https://github.com/falcosecurity/falco/blob/0.43.0/falco.yaml"&gt;Falco repository&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Any configuration option can be overridden on the command line via the &lt;code&gt;-o/--option key=value&lt;/code&gt; flag.
For &lt;code&gt;key: [value list]&lt;/code&gt; options, you can specify individual list items using &lt;code&gt;--option key.subkey=value&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;If a configuration entry (e.g. &lt;code&gt;key.subkey&lt;/code&gt;) is a list you can override a specific entry by index, e.g.: &lt;code&gt;--option key.subkey[0]=value&lt;/code&gt;.
Since Falco 0.38.0 you can also append new elements to a list by adding &lt;code&gt;--option key.subkey[]=value&lt;/code&gt; and/or &lt;code&gt;--option key.subkey[].newitem=value&lt;/code&gt;.&lt;/p&gt;
&lt;h2 id="config-files"&gt;&lt;code&gt;config_files&lt;/code&gt;&lt;/h2&gt;
&lt;p&gt;Since Falco 0.38.0 you can also load additional configuration files after the main one with the &lt;code&gt;config_files&lt;/code&gt; configuration entry, which can accept both files and directories. By default this option contains the &lt;code&gt;/etc/falco/config.d&lt;/code&gt; directory.&lt;/p&gt;
&lt;h3 id="merge-strategy"&gt;Merge strategy&lt;/h3&gt;
&lt;p&gt;Since Falco 0.41.0, it is possible to specify a merge strategy for each entry provided in the &lt;code&gt;config_files&lt;/code&gt; option. The loading of these files is assumed to happen after the main config file has been processed and then in the order they are specified. If a folder is specified, the files within that path are loaded in lexicographical order, and the merge strategy is applied for all files within that path. There are three merge strategies available, with &lt;code&gt;append&lt;/code&gt; being the default merge strategy.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;append&lt;/code&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Existing sequence keys will be appended&lt;/li&gt;
&lt;li&gt;Existing scalar keys will be overridden&lt;/li&gt;
&lt;li&gt;Non-existing keys will be added&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;override&lt;/code&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Existing keys will be overridden&lt;/li&gt;
&lt;li&gt;Non-existing keys will be added&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;add-only&lt;/code&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Existing keys will be ignored&lt;/li&gt;
&lt;li&gt;Non-existing keys will be added&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;To utilize these merge strategies in the &lt;code&gt;config_files&lt;/code&gt; option, add the strategy alongside the path:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;config_files&lt;/span&gt;:&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;- /etc/falco/config.d&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;- &lt;span style="color:#008000;font-weight:bold"&gt;path&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;/etc/falco/config.append.d/&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;strategy&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;append&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;- &lt;span style="color:#008000;font-weight:bold"&gt;path&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;/etc/falco/extra_config.yaml&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;strategy&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;add-only&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="card card-sm pageinfo pageinfo-warning my-4"&gt;
&lt;div class="card-body"&gt;
&lt;div class="card-text"&gt;
&lt;p&gt;&lt;strong&gt;Important:&lt;/strong&gt; Configuration merging occurs only at the &lt;strong&gt;root key level&lt;/strong&gt;, not for nested keys. This means that if a configuration file in &lt;code&gt;config.d/&lt;/code&gt; contains a root-level key (e.g., &lt;code&gt;engine:&lt;/code&gt;), the &lt;strong&gt;entire section&lt;/strong&gt; from the main &lt;code&gt;falco.yaml&lt;/code&gt; will be replaced, not merged.&lt;/p&gt;
&lt;p&gt;For example, if you have &lt;code&gt;engine-falcoctl.yaml&lt;/code&gt; in &lt;code&gt;/etc/falco/config.d/&lt;/code&gt; that sets the &lt;code&gt;engine.kind&lt;/code&gt; option, and you try to modify &lt;code&gt;engine.buf_size_preset&lt;/code&gt; in &lt;code&gt;/etc/falco/falco.yaml&lt;/code&gt;, your change will be ignored because the entire &lt;code&gt;engine:&lt;/code&gt; section is overridden by the file in &lt;code&gt;config.d/&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;To modify nested configuration options&lt;/strong&gt;, you should either:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Edit the file in &lt;code&gt;config.d/&lt;/code&gt; that contains the root key you want to modify&lt;/li&gt;
&lt;li&gt;Or remove/rename that file from &lt;code&gt;config.d/&lt;/code&gt; and make all changes directly in &lt;code&gt;falco.yaml&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;</description></item><item><title>Docs: Install on a host (tarball)</title><link>https://v0-43--falcosecurity.netlify.app/docs/setup/tarball/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://v0-43--falcosecurity.netlify.app/docs/setup/tarball/</guid><description>
&lt;div class="card card-sm pageinfo pageinfo-primary my-4"&gt;
&lt;div class="card-body"&gt;
&lt;div class="card-text"&gt;
&lt;p&gt;Falco consumes streams of events and evaluates them against a set of security &lt;a class='glossary-tooltip' title='Rules are conditions under which an alert should be generated.' data-toggle='tooltip' data-placement='top' href='https://v0-43--falcosecurity.netlify.app/docs/rules/basic-elements/#rules' target='_blank' aria-label='rules'&gt;rules&lt;/a&gt; to detect abnormal behavior. By default, Falco is pre-configured to consume events from the Linux Kernel. This scenario requires Falco to be privileged, and depending on the kernel version installed on the host, a &lt;a class='glossary-tooltip' title='The global term for the software that sends events from the kernel.' data-toggle='tooltip' data-placement='top' href='https://v0-43--falcosecurity.netlify.app/docs/concepts/event-sources/kernel/' target='_blank' aria-label='driver'&gt;driver&lt;/a&gt; needs to be installed.&lt;/p&gt;
&lt;p&gt;For other installation scenarios, such as consuming cloud events or other data sources using plugins, please refer to the &lt;a href="https://v0-43--falcosecurity.netlify.app/docs/concepts/plugins/"&gt;Plugins&lt;/a&gt; section.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;There are two main methods to install Falco on your host using the &lt;a href="https://v0-43--falcosecurity.netlify.app/docs/download"&gt;released Falco packages&lt;/a&gt;:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;RPM or DEB package (includes Systemd setup):&lt;/strong&gt; For instructions, refer to the &lt;a href="https://v0-43--falcosecurity.netlify.app/docs/setup/packages/"&gt;Install on a host (DEB, RPM)&lt;/a&gt; page.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Tarball archive:&lt;/strong&gt; This method is detailed on this page.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id="system-requirements"&gt;System requirements&lt;/h2&gt;
&lt;p&gt;Falco runs on &lt;strong&gt;Linux&lt;/strong&gt; and is available for the &lt;strong&gt;x86_64&lt;/strong&gt; and &lt;strong&gt;aarch64&lt;/strong&gt; architectures. Falco with its bundled plugins requires &lt;strong&gt;GLIBC 2.28&lt;/strong&gt; or newer. You can check your system's GLIBC version by running &lt;code&gt;ldd --version&lt;/code&gt;.&lt;/p&gt;
&lt;h2 id="install"&gt;Install&lt;/h2&gt;
&lt;p&gt;In these steps, we are targeting a Debian-like system on &lt;code&gt;x86_64&lt;/code&gt; architecture. You can easily extrapolate similar steps for other distros or architectures.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Download the latest binary:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;curl -L -O https://download.falco.org/packages/bin/x86_64/falco-0.43.0-x86_64.tar.gz
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Install Falco:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;tar -xvf falco-0.43.0-x86_64.tar.gz
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;cp -R falco-0.43.0-x86_64/* /
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Install some required dependencies that are needed to build the kernel module and the eBPF probe. If you want to use other sources like the modern eBPF probe or plugins, you can skip this step.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;apt update -y
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;apt install -y dkms make linux-headers-&lt;span style="color:#a2f;font-weight:bold"&gt;$(&lt;/span&gt;uname -r&lt;span style="color:#a2f;font-weight:bold"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#080;font-style:italic"&gt;# If you use falcoctl driver loader to build the eBPF probe locally you need also clang toolchain&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;apt install -y clang llvm
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Use the &lt;code&gt;falcoctl driver&lt;/code&gt; tool to configure Falco and install the kernel module or the eBPF probe. If you want to use other sources like the modern eBPF probe or plugins, you can skip this step.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="card card-sm pageinfo pageinfo-info my-4"&gt;
&lt;div class="card-body"&gt;
&lt;div class="card-text"&gt;
&lt;p&gt;To install the driver, write and execute permissions on the &lt;code&gt;/tmp&lt;/code&gt; directory are required, since &lt;code&gt;falcoctl&lt;/code&gt; will try to create and execute a script from there.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#080;font-style:italic"&gt;# If you want to use the kernel module, configure Falco for it&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;falcoctl driver config --type kmod
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#080;font-style:italic"&gt;# If you want to use the eBPF probe, configure Falco for it&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;falcoctl driver config --type ebpf
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#080;font-style:italic"&gt;# Install the chosen driver&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;falcoctl driver install
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;By default, the &lt;code&gt;falcoctl driver install&lt;/code&gt; command tries to download a prebuilt driver from &lt;a href="https://download.falco.org/?prefix=driver/"&gt;the official Falco download s3 bucket&lt;/a&gt;. If a driver is found, it is inserted into &lt;code&gt;${HOME}/.falco/&lt;/code&gt;. Otherwise, the script tries to compile the driver locally; for this reason, you need the dependencies in step [3].&lt;/p&gt;
&lt;p&gt;You can use the environment variable &lt;code&gt;FALCOCTL_DRIVER_REPOS&lt;/code&gt; to override the default repository URL for prebuilt drivers. The URL must not have a trailing slash, i.e., &lt;code&gt;https://myhost.mydomain.com&lt;/code&gt; or, if the server has a subdirectory structure, &lt;code&gt;https://myhost.mydomain.com/drivers&lt;/code&gt;. The drivers must be hosted with the following structure:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;/&lt;span style="color:#b68;font-weight:bold"&gt;${&lt;/span&gt;&lt;span style="color:#b8860b"&gt;driver_version&lt;/span&gt;&lt;span style="color:#b68;font-weight:bold"&gt;}&lt;/span&gt;/&lt;span style="color:#b68;font-weight:bold"&gt;${&lt;/span&gt;&lt;span style="color:#b8860b"&gt;arch&lt;/span&gt;&lt;span style="color:#b68;font-weight:bold"&gt;}&lt;/span&gt;/falco_&lt;span style="color:#b68;font-weight:bold"&gt;${&lt;/span&gt;&lt;span style="color:#b8860b"&gt;target&lt;/span&gt;&lt;span style="color:#b68;font-weight:bold"&gt;}&lt;/span&gt;_&lt;span style="color:#b68;font-weight:bold"&gt;${&lt;/span&gt;&lt;span style="color:#b8860b"&gt;kernelrelease&lt;/span&gt;&lt;span style="color:#b68;font-weight:bold"&gt;}&lt;/span&gt;_&lt;span style="color:#b68;font-weight:bold"&gt;${&lt;/span&gt;&lt;span style="color:#b8860b"&gt;kernelversion&lt;/span&gt;&lt;span style="color:#b68;font-weight:bold"&gt;}&lt;/span&gt;.&lt;span style="color:#666"&gt;[&lt;/span&gt;ko|o&lt;span style="color:#666"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;where &lt;code&gt;ko&lt;/code&gt; and &lt;code&gt;o&lt;/code&gt; stand for Kernel module and &lt;code&gt;eBPF&lt;/code&gt; probe, respectively. This is an example:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;/7.0.0+driver/x86_64/falco_amazonlinux2022_5.10.75-82.359.amzn2022.x86_64_1.ko
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;blockquote&gt;
&lt;p&gt;If you wish to print some debug info, you can use:&lt;/p&gt;
&lt;/blockquote&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#080;font-style:italic"&gt;# If you want to use the kernel module, configure Falco for it&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;falcoctl driver printenv
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="manual-systemd-setup"&gt;Manual Systemd setup&lt;/h2&gt;
&lt;p&gt;The Falco &lt;code&gt;.tar.gz&lt;/code&gt; archive doesn't include the Systemd setup. If you want to enable Falco to start automatically at boot time, you can still download &lt;code&gt;systemd&lt;/code&gt; files from the &lt;a href="https://github.com/falcosecurity/falco/tree/master/scripts/systemd"&gt;Falco repo&lt;/a&gt; and place them in the &lt;code&gt;/lib/systemd/system&lt;/code&gt; directory. Finally, you can follow the same instructions for &lt;a href="https://v0-43--falcosecurity.netlify.app/docs/setup/packages/#enable-falco-on-systemd-manually"&gt;enabling Systemd manually&lt;/a&gt; under the &lt;em&gt;Install on a host (DEB, RPM)&lt;/em&gt; section.&lt;/p&gt;
&lt;h2 id="configuration"&gt;Configuration&lt;/h2&gt;
&lt;p&gt;The Falco configuration file is located at &lt;code&gt;/etc/falco/falco.yaml&lt;/code&gt;. You can edit it to customize Falco's behavior.&lt;/p&gt;
&lt;p&gt;Since Falco 0.38.0, a new config key, &lt;code&gt;config_files&lt;/code&gt;, allows the user to load additional configuration files to override main config entries; it allows users to keep local customization between Falco upgrades. Its default value points to a new folder, &lt;code&gt;/etc/falco/config.d/&lt;/code&gt;, that gets installed by Falco and will be processed to look for local configuration files.&lt;/p&gt;
&lt;p&gt;You can also override the default configuration by passing options to the &lt;code&gt;falco&lt;/code&gt; binary. For example, to force the eBPF probe or the kernel module:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#080;font-style:italic"&gt;# Force eBPF probe&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;falco -o engine.kind&lt;span style="color:#666"&gt;=&lt;/span&gt;ebpf
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#080;font-style:italic"&gt;# Force kernel module&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;falco -o engine.kind&lt;span style="color:#666"&gt;=&lt;/span&gt;kmod
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="hot-reload"&gt;Hot Reload&lt;/h3&gt;
&lt;p&gt;By default, with the &lt;code&gt;watch_config_files&lt;/code&gt; configuration option enabled, Falco automatically monitors changes to configuration and rule files. When these files are modified, Falco will automatically reload the updated configuration without requiring a restart.&lt;/p&gt;
&lt;p&gt;If this option is disabled, you can manually reload the configuration by sending a &lt;code&gt;SIGHUP&lt;/code&gt; signal to the Falco process. To do this, use the following command:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a2f"&gt;kill&lt;/span&gt; -1 &lt;span style="color:#a2f;font-weight:bold"&gt;$(&lt;/span&gt;pidof falco&lt;span style="color:#a2f;font-weight:bold"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="upgrade"&gt;Upgrade&lt;/h2&gt;
&lt;p&gt;If you are using the &lt;a class='glossary-tooltip' title='Used to describe the .ko object that would be loaded into the kernel as a potentially risky kernel module.' data-toggle='tooltip' data-placement='top' href='https://linux-kernel-labs.github.io/refs/heads/master/labs/kernel_modules.html' target='_blank' aria-label='Kernel Module'&gt;Kernel Module&lt;/a&gt; driver, please remove it with root privileges before upgrading Falco to avoid issues during the upgrade.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;rmmod falco
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;When utilizing the &lt;a class='glossary-tooltip' title='The eBPF probe (deprecated) collects syscall events from the Kernel, as the Kernel module does.' data-toggle='tooltip' data-placement='top' href='https://v0-43--falcosecurity.netlify.app/docs/concepts/event-sources/kernel/#legacy-ebpf-probe' target='_blank' aria-label='eBPF probe'&gt;eBPF probe&lt;/a&gt; driver, although not strictly required, you can remove the corresponding previous object files:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;rm /root/.falco/*.o
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;With &lt;a class='glossary-tooltip' title='More robust eBPF probe which brings the CO-RE paradigm, better performances and maintainability.' data-toggle='tooltip' data-placement='top' href='https://v0-43--falcosecurity.netlify.app/docs/concepts/event-sources/kernel/#modern-ebpf-probe' target='_blank' aria-label='Modern eBPF'&gt;Modern eBPF&lt;/a&gt;, there is no requirement when updating Falco, as the driver is bundled within the Falco binary.&lt;/p&gt;
&lt;p&gt;Once the driver is removed, ensure the &lt;code&gt;falco&lt;/code&gt; daemon is not running, then you can follow the same steps as the &lt;a href="https://v0-43--falcosecurity.netlify.app/docs/setup/tarball/#install"&gt;Install&lt;/a&gt; section.&lt;/p&gt;
&lt;h2 id="uninstall"&gt;Uninstall&lt;/h2&gt;
&lt;p&gt;For the Falco binary, we don't provide specific update paths; you just have to remove files installed by the old &lt;code&gt;tar.gz&lt;/code&gt;.&lt;/p&gt;</description></item><item><title>Docs: Kubernetes Audit Events</title><link>https://v0-43--falcosecurity.netlify.app/docs/concepts/event-sources/plugins/kubernetes-audit/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://v0-43--falcosecurity.netlify.app/docs/concepts/event-sources/plugins/kubernetes-audit/</guid><description>
&lt;p&gt;Falco v0.13.0 adds &lt;a href="https://kubernetes.io/docs/tasks/debug-application-cluster/audit/#audit-backends"&gt;Kubernetes Audit Events&lt;/a&gt; to the list of supported event sources. This is in addition to the existing support for system call events. An improved implementation of audit events was introduced in Kubernetes v1.11 and it provides a log of requests and responses to &lt;a href="https://kubernetes.io/docs/reference/command-line-tools-reference/kube-apiserver/"&gt;kube-apiserver&lt;/a&gt;. Because almost all the cluster management tasks are performed through the API server, the &lt;a class='glossary-tooltip' title='Audit logs from the Kubernetes control plane.' data-toggle='tooltip' data-placement='top' href='https://kubernetes.io/docs/tasks/debug/debug-cluster/audit/' target='_blank' aria-label='audit log'&gt;audit log&lt;/a&gt; can effectively track the changes made to your cluster.&lt;/p&gt;
&lt;p&gt;Examples of this include:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Creating and destroying pods, services, deployments, daemonsets, etc.&lt;/li&gt;
&lt;li&gt;Creating, updating, and removing ConfigMaps or secrets&lt;/li&gt;
&lt;li&gt;Subscribing to the changes introduced to any endpoint&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;To cover these scenarios, additional set of falco rules have been added that monitor for notable or suspicious activity, including:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Creating pods that are privileged, mount sensitive host paths, or use host networking.&lt;/li&gt;
&lt;li&gt;Granting overly broad permissions such as &lt;code&gt;cluster-admin&lt;/code&gt; to users.&lt;/li&gt;
&lt;li&gt;Creating ConfigMaps with sensitive information.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Once your cluster is configured with audit logging and the events are selected to be sent to falco, you can write falco rules that can read these events and send notifications for suspicious or other notable activity.&lt;/p&gt;
&lt;h2 id="what-s-new-in-falco"&gt;What's New in Falco&lt;/h2&gt;
&lt;p&gt;Since &lt;a href="https://v0-43--falcosecurity.netlify.app/blog/falco-0-32-0/"&gt;Falco 0.32.0&lt;/a&gt;, the Kubernetes Audit Events support has been &lt;a href="https://github.com/falcosecurity/plugins/tree/master/plugins/k8saudit"&gt;refactored to become a plugin&lt;/a&gt; and is compliant to the &lt;a href="https://v0-43--falcosecurity.netlify.app/docs/plugins/"&gt;Falco Plugin System&lt;/a&gt;. Previously, this feature was supported as a parallel independent stream of events that was read separately from system calls, and was matched separately against its own sets of rules.&lt;/p&gt;
&lt;p&gt;To receive Kubernetes audit events, the plugin embeds a webserver that listens on a configurable port and accepts POST requests on a configurable endpoint. The posted JSON object comprises the event. The webserver embedded inside Falco to implement endpoints such as &lt;code&gt;/healthz&lt;/code&gt; is totally &lt;strong&gt;unrelated and independent&lt;/strong&gt; from the webserver of the plugin. The webserver of the plugin can be configured as part of the plugin's init configuration and open parameters.&lt;/p&gt;
&lt;p&gt;See &lt;a href="https://v0-43--falcosecurity.netlify.app/docs/reference/daemon/config-options/"&gt;configuration page&lt;/a&gt; for information on how plugins can be configured in Falco, and refer to &lt;a href="https://github.com/falcosecurity/plugins/blob/master/plugins/k8saudit/README.md"&gt;the plugin's readme&lt;/a&gt; for more specifics.&lt;/p&gt;
&lt;p&gt;The new plugin-based implementation has been developed to be as similar as possible to the legacy K8S Audit Events feature introduced in Falco 0.13.0. However, due to technical constraints, there are few user-facing differences. Although the most up-to-date setups should work as they used to, there are few user-facing differences to be mindful of:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;K8S Audit Events support must be configured in &lt;code&gt;falco.yaml&lt;/code&gt; through the &lt;code&gt;plugins&lt;/code&gt; section through the plugin's init configuration and open parameters.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;In the legacy implementation, the extraction of list of values was supported implicitly. When extracting a field for a rule condition or output, the check used to be able to extract single values or list of values, and use them with operators such as &lt;code&gt;in&lt;/code&gt;, &lt;code&gt;intersect&lt;/code&gt;, etc. However, the concept of &amp;quot;list&amp;quot; was totally implicity and there was no distinction between single values and lists of values with length equal to 1.&lt;br&gt;
Now, the plugin-based implementation is compliant to the new semantics supported in the libs since Falco 0.32, which allows fields to be of explicit list type. A field of list type will always extract list of values, containing one or more entries, or fail the extraction.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Fields of list type now only support the &lt;code&gt;in&lt;/code&gt; and &lt;code&gt;intersects&lt;/code&gt; operators. For example, checks such as &lt;code&gt;ka.req.role.rules.verbs contains create&lt;/code&gt; would be rejected and would need to be changed in the equivalent &lt;code&gt;ka.req.role.rules.verbs intersects (create)&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Failed field value extraction should now be checked with the &lt;code&gt;exists&lt;/code&gt; operator, and not by comparing with the &lt;code&gt;&amp;lt;NA&amp;gt;&lt;/code&gt; string.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;The &lt;code&gt;&amp;lt;NA&amp;gt;&lt;/code&gt; string literal is not returned anymore, neither in single-valued fields nor in list fields. In the legacy implementation, field existence was occasionally checked with expressions like &lt;code&gt;ka.target.subresource != &amp;lt;NA&amp;gt;&lt;/code&gt;, which would now inherently be always false, because if the field was absent the string comparison ends up failing. Instead, prefer using the analogous &lt;code&gt;ka.target.subresource exists&lt;/code&gt;, which explicitly checks for missing values&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;The &lt;code&gt;/healthz&lt;/code&gt; endpoint of Falco cannot bind to the same port of the K8S Audit Log endpoint (e.g. &lt;code&gt;/k8s-audit&lt;/code&gt;), due to the fact that they are now managed by two different webservers (one in Falco, one in the plugin).&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;In Falco versions 0.32.x (&lt;a href="https://v0-43--falcosecurity.netlify.app/blog/falco-0-32-0/"&gt;Falco v0.32.0&lt;/a&gt;, &lt;a href="https://v0-43--falcosecurity.netlify.app/blog/falco-0-32-1/"&gt;v0.32.1&lt;/a&gt;, and &lt;a href="https://v0-43--falcosecurity.netlify.app/blog/falco-0-32-2/"&gt; v0.32.2&lt;/a&gt;), Falco didn't allow the use of Syscalls and K8S Audit event sources on the same instance. Starting from &lt;a href="https://v0-43--falcosecurity.netlify.app/blog/falco-0-33-0/"&gt;version 0.33.0&lt;/a&gt;, Falco introduced the capability of &lt;a href="https://v0-43--falcosecurity.netlify.app/docs/concepts/event-sources/#configuring-event-sources"&gt;consuming events from multiple event sources simultaneously within the same Falco instance&lt;/a&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="kubernetes-audit-rules"&gt;Kubernetes Audit Rules&lt;/h2&gt;
&lt;p&gt;Rules devoted to Kubernetes audit events are given in &lt;a href="https://github.com/falcosecurity/plugins/tree/master/plugins/k8saudit/rules"&gt;the default k8saudit plugin rules&lt;/a&gt;. When installed as a daemon, falco installs this rules file to &lt;code&gt;/etc/falco/&lt;/code&gt;, so they are available for use.&lt;/p&gt;
&lt;h3 id="example"&gt;Example&lt;/h3&gt;
&lt;p&gt;One of the rules in &lt;code&gt;k8s_audit_rules.yaml&lt;/code&gt; is as follows:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;- &lt;span style="color:#008000;font-weight:bold"&gt;list&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;k8s_audit_stages&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;items&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;[&lt;span style="color:#b44"&gt;&amp;#34;ResponseComplete&amp;#34;&lt;/span&gt;]&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#080;font-style:italic"&gt;# This macro selects the set of Audit Events used by the below rules.&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;- &lt;span style="color:#008000;font-weight:bold"&gt;macro&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;kevt&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;condition&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;(jevt.value[/stage] in (k8s_audit_stages))&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;- &lt;span style="color:#008000;font-weight:bold"&gt;macro&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;kmodify&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;condition&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;(ka.verb in (create,update,patch))&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;- &lt;span style="color:#008000;font-weight:bold"&gt;macro&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;configmap&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;condition&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;ka.target.resource=configmaps&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;- &lt;span style="color:#008000;font-weight:bold"&gt;macro&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;contains_private_credentials&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;condition&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;&amp;gt;&lt;span style="color:#b44;font-style:italic"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#b44;font-style:italic"&gt; (ka.req.configmap.obj contains &amp;#34;aws_access_key_id&amp;#34; or
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#b44;font-style:italic"&gt; ka.req.configmap.obj contains &amp;#34;aws-access-key-id&amp;#34; or
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#b44;font-style:italic"&gt; ka.req.configmap.obj contains &amp;#34;aws_s3_access_key_id&amp;#34; or
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#b44;font-style:italic"&gt; ka.req.configmap.obj contains &amp;#34;aws-s3-access-key-id&amp;#34; or
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#b44;font-style:italic"&gt; ka.req.configmap.obj contains &amp;#34;password&amp;#34; or
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#b44;font-style:italic"&gt; ka.req.configmap.obj contains &amp;#34;passphrase&amp;#34;)&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;- &lt;span style="color:#008000;font-weight:bold"&gt;rule&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;Configmap contains private credentials&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;desc&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;&amp;gt;&lt;span style="color:#b44;font-style:italic"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#b44;font-style:italic"&gt; Detect configmap operations with map containing a private credential (aws key, password, etc.)&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;condition&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;kevt and configmap and modify and contains_private_credentials&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;output&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;K8s configmap with private credential | user=%ka.user.name verb=%ka.verb name=%ka.req.configmap.name configmap=%ka.req.configmap.name config=%ka.req.configmap.obj&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;priority&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;WARNING&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;source&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;k8s_audit&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;tags&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;[k8s]&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The &lt;code&gt;Configmap contains private credentials&lt;/code&gt; rule checks for a ConfigMap created with possibly sensitive items, such as AWS keys or passwords.&lt;/p&gt;
&lt;p&gt;Let's see how the rule works in such cases. This topic assumes that Kubernetes audit logging is configured in your environment.&lt;/p&gt;
&lt;p&gt;Create a ConfigMap containing AWS credentials:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;apiVersion&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;v1&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;data&lt;/span&gt;:&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;ui.properties&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;|&lt;span style="color:#b44;font-style:italic"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#b44;font-style:italic"&gt; color.good=purple
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#b44;font-style:italic"&gt; color.bad=yellow
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#b44;font-style:italic"&gt; allow.textmode=true&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;access.properties&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;|&lt;span style="color:#b44;font-style:italic"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#b44;font-style:italic"&gt; aws_access_key_id = MY-ID
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#b44;font-style:italic"&gt; aws_secret_access_key = MY-KEY&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;kind&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;ConfigMap&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;metadata&lt;/span&gt;:&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;creationTimestamp&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;2016-02-18T18:52:05Z&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;name&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;my-config&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;namespace&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;default&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;resourceVersion&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#b44"&gt;&amp;#34;516&amp;#34;&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;selfLink&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;/api/v1/namespaces/default/configmaps/my-config&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;uid&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;b4952dc3-d670-11e5-8cd0-68f728db1985&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Creating this ConfigMap results in the following json object in the audit log:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-json" data-lang="json"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#008000;font-weight:bold"&gt;&amp;#34;kind&amp;#34;&lt;/span&gt;: &lt;span style="color:#b44"&gt;&amp;#34;Event&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#008000;font-weight:bold"&gt;&amp;#34;apiVersion&amp;#34;&lt;/span&gt;: &lt;span style="color:#b44"&gt;&amp;#34;audit.k8s.io/v1beta1&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#008000;font-weight:bold"&gt;&amp;#34;metadata&amp;#34;&lt;/span&gt;: {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#008000;font-weight:bold"&gt;&amp;#34;creationTimestamp&amp;#34;&lt;/span&gt;: &lt;span style="color:#b44"&gt;&amp;#34;2018-10-20T00:18:28Z&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; },
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#008000;font-weight:bold"&gt;&amp;#34;level&amp;#34;&lt;/span&gt;: &lt;span style="color:#b44"&gt;&amp;#34;RequestResponse&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#008000;font-weight:bold"&gt;&amp;#34;timestamp&amp;#34;&lt;/span&gt;: &lt;span style="color:#b44"&gt;&amp;#34;2018-10-20T00:18:28Z&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#008000;font-weight:bold"&gt;&amp;#34;auditID&amp;#34;&lt;/span&gt;: &lt;span style="color:#b44"&gt;&amp;#34;33fa264e-1124-4252-af9e-2ce6e45fe07d&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#008000;font-weight:bold"&gt;&amp;#34;stage&amp;#34;&lt;/span&gt;: &lt;span style="color:#b44"&gt;&amp;#34;ResponseComplete&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#008000;font-weight:bold"&gt;&amp;#34;requestURI&amp;#34;&lt;/span&gt;: &lt;span style="color:#b44"&gt;&amp;#34;/api/v1/namespaces/default/configmaps&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#008000;font-weight:bold"&gt;&amp;#34;verb&amp;#34;&lt;/span&gt;: &lt;span style="color:#b44"&gt;&amp;#34;create&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#008000;font-weight:bold"&gt;&amp;#34;user&amp;#34;&lt;/span&gt;: {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#008000;font-weight:bold"&gt;&amp;#34;username&amp;#34;&lt;/span&gt;: &lt;span style="color:#b44"&gt;&amp;#34;minikube-user&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#008000;font-weight:bold"&gt;&amp;#34;groups&amp;#34;&lt;/span&gt;: [
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#b44"&gt;&amp;#34;system:masters&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#b44"&gt;&amp;#34;system:authenticated&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; ]
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; },
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#008000;font-weight:bold"&gt;&amp;#34;sourceIPs&amp;#34;&lt;/span&gt;: [
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#b44"&gt;&amp;#34;192.168.99.1&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; ],
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#008000;font-weight:bold"&gt;&amp;#34;objectRef&amp;#34;&lt;/span&gt;: {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#008000;font-weight:bold"&gt;&amp;#34;resource&amp;#34;&lt;/span&gt;: &lt;span style="color:#b44"&gt;&amp;#34;configmaps&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#008000;font-weight:bold"&gt;&amp;#34;namespace&amp;#34;&lt;/span&gt;: &lt;span style="color:#b44"&gt;&amp;#34;default&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#008000;font-weight:bold"&gt;&amp;#34;name&amp;#34;&lt;/span&gt;: &lt;span style="color:#b44"&gt;&amp;#34;my-config&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#008000;font-weight:bold"&gt;&amp;#34;uid&amp;#34;&lt;/span&gt;: &lt;span style="color:#b44"&gt;&amp;#34;b4952dc3-d670-11e5-8cd0-68f728db1985&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#008000;font-weight:bold"&gt;&amp;#34;apiVersion&amp;#34;&lt;/span&gt;: &lt;span style="color:#b44"&gt;&amp;#34;v1&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; },
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#008000;font-weight:bold"&gt;&amp;#34;responseStatus&amp;#34;&lt;/span&gt;: {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#008000;font-weight:bold"&gt;&amp;#34;metadata&amp;#34;&lt;/span&gt;: {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; },
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#008000;font-weight:bold"&gt;&amp;#34;code&amp;#34;&lt;/span&gt;: &lt;span style="color:#666"&gt;201&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; },
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#008000;font-weight:bold"&gt;&amp;#34;requestObject&amp;#34;&lt;/span&gt;: {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#008000;font-weight:bold"&gt;&amp;#34;kind&amp;#34;&lt;/span&gt;: &lt;span style="color:#b44"&gt;&amp;#34;ConfigMap&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#008000;font-weight:bold"&gt;&amp;#34;apiVersion&amp;#34;&lt;/span&gt;: &lt;span style="color:#b44"&gt;&amp;#34;v1&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#008000;font-weight:bold"&gt;&amp;#34;metadata&amp;#34;&lt;/span&gt;: {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#008000;font-weight:bold"&gt;&amp;#34;name&amp;#34;&lt;/span&gt;: &lt;span style="color:#b44"&gt;&amp;#34;my-config&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#008000;font-weight:bold"&gt;&amp;#34;namespace&amp;#34;&lt;/span&gt;: &lt;span style="color:#b44"&gt;&amp;#34;default&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#008000;font-weight:bold"&gt;&amp;#34;selfLink&amp;#34;&lt;/span&gt;: &lt;span style="color:#b44"&gt;&amp;#34;/api/v1/namespaces/default/configmaps/my-config&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#008000;font-weight:bold"&gt;&amp;#34;uid&amp;#34;&lt;/span&gt;: &lt;span style="color:#b44"&gt;&amp;#34;b4952dc3-d670-11e5-8cd0-68f728db1985&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#008000;font-weight:bold"&gt;&amp;#34;creationTimestamp&amp;#34;&lt;/span&gt;: &lt;span style="color:#b44"&gt;&amp;#34;2016-02-18T18:52:05Z&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; },
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#008000;font-weight:bold"&gt;&amp;#34;data&amp;#34;&lt;/span&gt;: {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#008000;font-weight:bold"&gt;&amp;#34;access.properties&amp;#34;&lt;/span&gt;: &lt;span style="color:#b44"&gt;&amp;#34;aws_access_key_id = MY-ID\naws_secret_access_key = MY-KEY\n&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#008000;font-weight:bold"&gt;&amp;#34;ui.properties&amp;#34;&lt;/span&gt;: &lt;span style="color:#b44"&gt;&amp;#34;color.good=purple\ncolor.bad=yellow\nallow.textmode=true\n&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; },
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#008000;font-weight:bold"&gt;&amp;#34;responseObject&amp;#34;&lt;/span&gt;: {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#008000;font-weight:bold"&gt;&amp;#34;kind&amp;#34;&lt;/span&gt;: &lt;span style="color:#b44"&gt;&amp;#34;ConfigMap&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#008000;font-weight:bold"&gt;&amp;#34;apiVersion&amp;#34;&lt;/span&gt;: &lt;span style="color:#b44"&gt;&amp;#34;v1&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#008000;font-weight:bold"&gt;&amp;#34;metadata&amp;#34;&lt;/span&gt;: {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#008000;font-weight:bold"&gt;&amp;#34;name&amp;#34;&lt;/span&gt;: &lt;span style="color:#b44"&gt;&amp;#34;my-config&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#008000;font-weight:bold"&gt;&amp;#34;namespace&amp;#34;&lt;/span&gt;: &lt;span style="color:#b44"&gt;&amp;#34;default&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#008000;font-weight:bold"&gt;&amp;#34;selfLink&amp;#34;&lt;/span&gt;: &lt;span style="color:#b44"&gt;&amp;#34;/api/v1/namespaces/default/configmaps/my-config&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#008000;font-weight:bold"&gt;&amp;#34;uid&amp;#34;&lt;/span&gt;: &lt;span style="color:#b44"&gt;&amp;#34;ab04e510-d3fd-11e8-8645-080027728ac4&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#008000;font-weight:bold"&gt;&amp;#34;resourceVersion&amp;#34;&lt;/span&gt;: &lt;span style="color:#b44"&gt;&amp;#34;45437&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#008000;font-weight:bold"&gt;&amp;#34;creationTimestamp&amp;#34;&lt;/span&gt;: &lt;span style="color:#b44"&gt;&amp;#34;2018-10-20T00:18:28Z&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; },
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#008000;font-weight:bold"&gt;&amp;#34;data&amp;#34;&lt;/span&gt;: {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#008000;font-weight:bold"&gt;&amp;#34;access.properties&amp;#34;&lt;/span&gt;: &lt;span style="color:#b44"&gt;&amp;#34;aws_access_key_id = MY-ID\naws_secret_access_key = MY-KEY\n&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#008000;font-weight:bold"&gt;&amp;#34;ui.properties&amp;#34;&lt;/span&gt;: &lt;span style="color:#b44"&gt;&amp;#34;color.good=purple\ncolor.bad=yellow\nallow.textmode=true\n&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; },
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#008000;font-weight:bold"&gt;&amp;#34;requestReceivedTimestamp&amp;#34;&lt;/span&gt;: &lt;span style="color:#b44"&gt;&amp;#34;2018-10-20T00:18:28.420807Z&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#008000;font-weight:bold"&gt;&amp;#34;stageTimestamp&amp;#34;&lt;/span&gt;: &lt;span style="color:#b44"&gt;&amp;#34;2018-10-20T00:18:28.428398Z&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#008000;font-weight:bold"&gt;&amp;#34;annotations&amp;#34;&lt;/span&gt;: {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#008000;font-weight:bold"&gt;&amp;#34;authorization.k8s.io/decision&amp;#34;&lt;/span&gt;: &lt;span style="color:#b44"&gt;&amp;#34;allow&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#008000;font-weight:bold"&gt;&amp;#34;authorization.k8s.io/reason&amp;#34;&lt;/span&gt;: &lt;span style="color:#b44"&gt;&amp;#34;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;When the ConfigMap contains private credentials, the rule uses the following fields in the given order:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;kevt&lt;/code&gt;: Checks whether the &lt;code&gt;stage&lt;/code&gt; property of the object is present in the &lt;code&gt;k8s_audit_stages&lt;/code&gt; list.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;configmap&lt;/code&gt;: Checks whether the value of the &lt;code&gt;objectRef &amp;gt; resource&lt;/code&gt; property equals to &amp;quot;configmap&amp;quot;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;kmodify&lt;/code&gt;: Checks whether the value of &lt;code&gt;verb&lt;/code&gt; is one of the following: &lt;code&gt;create&lt;/code&gt;,&lt;code&gt;update&lt;/code&gt;,&lt;code&gt;patch&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;contains-private-credentials&lt;/code&gt;: Search the ConfigMap contents at &lt;code&gt;requestObject &amp;gt; data&lt;/code&gt; for any of the sensitive strings named in the &lt;code&gt;contains_private_credentials&lt;/code&gt; macro.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;If they do, a falco alert is generated:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code class="language-log" data-lang="log"&gt;17:18:28.428398080: Warning K8s ConfigMap with private credential
(user=minikube-user verb=create configmap=my-config
config={&amp;#34;access.properties&amp;#34;:&amp;#34;aws_access_key_id = MY-ID\naws_secret_access_key = MY-KEY\n&amp;#34;,
&amp;#34;ui.properties&amp;#34;:&amp;#34;color.good=purple\ncolor.bad=yellow\nallow.textmode=true\n&amp;#34;})
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;The output string is used to print essential information about the audit event, including:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;user: &lt;code&gt;%ka.user.name&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;verb: &lt;code&gt;%ka.verb&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;ConfigMap name: &lt;code&gt;%ka.req.configmap.name&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;ConfigMap contents: &lt;code&gt;%ka.req.configmap.obj&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="enabling-kubernetes-audit-logs"&gt;Enabling Kubernetes Audit Logs&lt;/h3&gt;
&lt;p&gt;To enable Kubernetes audit logs, you need to change the arguments to the &lt;code&gt;kube-apiserver&lt;/code&gt; process to add &lt;code&gt;--audit-policy-file&lt;/code&gt; and &lt;code&gt;--audit-webhook-config-file&lt;/code&gt; arguments and provide files that implement an audit policy/webhook configuration.&lt;/p&gt;
&lt;p&gt;It is beyond the scope of Falco documentation to give a detailed description of how to do this, but &lt;a href="https://v0-43--falcosecurity.netlify.app/docs/getting-started/learning-environments/#falco-with-multiple-sources"&gt;this step-by-step guide&lt;/a&gt; will show you how to configure &lt;code&gt;kubernetes audit logs&lt;/code&gt; on &lt;code&gt;minikube&lt;/code&gt; and deploy Falco. Managed Kubernetes providers will usually provide a mechanism to configure the audit system.&lt;/p&gt;
&lt;div class="alert alert-warning" role="alert"&gt;
Dynamic Audit Webhooks were &lt;a href="https://github.com/kubernetes/kubernetes/pull/91502"&gt;removed&lt;/a&gt; from Kubernetes. However, static audit configuration continues to work.
&lt;/div&gt;</description></item><item><title>Docs: Supported Events</title><link>https://v0-43--falcosecurity.netlify.app/docs/reference/rules/supported-events/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://v0-43--falcosecurity.netlify.app/docs/reference/rules/supported-events/</guid><description>
&lt;p&gt;Here are the system call event types and args supported by the &lt;a href="https://v0-43--falcosecurity.netlify.app/docs/concepts/event-sources/kernel/"&gt;kernel module and eBPF probes&lt;/a&gt; via &lt;code&gt;libscap&lt;/code&gt; included in the Falco libs. Note that, for performance reasons, by default Falco will only consider a subset of them indicated in the table below with &amp;quot;yes&amp;quot;. However, it's possible to make Falco consider all events by using the &lt;code&gt;-A&lt;/code&gt; command line switch.&lt;/p&gt;
&lt;p&gt;Note that several event types exist:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://v0-43--falcosecurity.netlify.app/docs/reference/rules/supported-events/#syscall-events"&gt;Syscall events&lt;/a&gt; correspond to Linux system calls. Most of them have parameters, documented below, while some are detected as generic and they only offer the syscall ID.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://v0-43--falcosecurity.netlify.app/docs/reference/rules/supported-events/#tracepoint-events"&gt;Tracepoint events&lt;/a&gt; represent internal kernel events that may be significant but don't directly translate to any syscall.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://v0-43--falcosecurity.netlify.app/docs/reference/rules/supported-events/#metaevents"&gt;Metaevents&lt;/a&gt; are generated from supplementary data sources, for instance, during data enrichment procedures or when the need for asynchronous actions arises. This group also encompasses some of Falco's internally produced events (such as the &lt;code&gt;drop&lt;/code&gt; event) that are unavailable for rules.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://v0-43--falcosecurity.netlify.app/docs/reference/rules/supported-events/#plugin-events"&gt;Plugin events&lt;/a&gt; act as an envelope for actual plugin event data. In order to write rules that use plugins use the fields documented in the individual plugin.&lt;/li&gt;
&lt;/ul&gt;
&lt;!--
generated with:
falco --list-events --markdown
--&gt;
&lt;p&gt;The events below are valid for Falco &lt;em&gt;Schema Version&lt;/em&gt;: 4.1.0&lt;/p&gt;
&lt;h2 id="syscall-events"&gt;Syscall events&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style="text-align: left"&gt;Default&lt;/th&gt;
&lt;th style="text-align: left"&gt;Dir&lt;/th&gt;
&lt;th style="text-align: left"&gt;Name&lt;/th&gt;
&lt;th style="text-align: left"&gt;Params&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;open&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;FSPATH &lt;strong&gt;name&lt;/strong&gt;, FLAGS32 &lt;strong&gt;flags&lt;/strong&gt;: &lt;em&gt;O_LARGEFILE&lt;/em&gt;, &lt;em&gt;O_DIRECTORY&lt;/em&gt;, &lt;em&gt;O_DIRECT&lt;/em&gt;, &lt;em&gt;O_TRUNC&lt;/em&gt;, &lt;em&gt;O_SYNC&lt;/em&gt;, &lt;em&gt;O_NONBLOCK&lt;/em&gt;, &lt;em&gt;O_EXCL&lt;/em&gt;, &lt;em&gt;O_DSYNC&lt;/em&gt;, &lt;em&gt;O_APPEND&lt;/em&gt;, &lt;em&gt;O_CREAT&lt;/em&gt;, &lt;em&gt;O_RDWR&lt;/em&gt;, &lt;em&gt;O_WRONLY&lt;/em&gt;, &lt;em&gt;O_RDONLY&lt;/em&gt;, &lt;em&gt;O_CLOEXEC&lt;/em&gt;, &lt;em&gt;O_NONE&lt;/em&gt;, &lt;em&gt;O_TMPFILE&lt;/em&gt;, &lt;em&gt;O_F_CREATED&lt;/em&gt;, &lt;em&gt;FD_UPPER_LAYER&lt;/em&gt;, &lt;em&gt;FD_LOWER_LAYER&lt;/em&gt;, UINT32 &lt;strong&gt;mode&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;open&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;FD &lt;strong&gt;fd&lt;/strong&gt;, FSPATH &lt;strong&gt;name&lt;/strong&gt;, FLAGS32 &lt;strong&gt;flags&lt;/strong&gt;: &lt;em&gt;O_LARGEFILE&lt;/em&gt;, &lt;em&gt;O_DIRECTORY&lt;/em&gt;, &lt;em&gt;O_DIRECT&lt;/em&gt;, &lt;em&gt;O_TRUNC&lt;/em&gt;, &lt;em&gt;O_SYNC&lt;/em&gt;, &lt;em&gt;O_NONBLOCK&lt;/em&gt;, &lt;em&gt;O_EXCL&lt;/em&gt;, &lt;em&gt;O_DSYNC&lt;/em&gt;, &lt;em&gt;O_APPEND&lt;/em&gt;, &lt;em&gt;O_CREAT&lt;/em&gt;, &lt;em&gt;O_RDWR&lt;/em&gt;, &lt;em&gt;O_WRONLY&lt;/em&gt;, &lt;em&gt;O_RDONLY&lt;/em&gt;, &lt;em&gt;O_CLOEXEC&lt;/em&gt;, &lt;em&gt;O_NONE&lt;/em&gt;, &lt;em&gt;O_TMPFILE&lt;/em&gt;, &lt;em&gt;O_F_CREATED&lt;/em&gt;, &lt;em&gt;FD_UPPER_LAYER&lt;/em&gt;, &lt;em&gt;FD_LOWER_LAYER&lt;/em&gt;, UINT32 &lt;strong&gt;mode&lt;/strong&gt;, UINT32 &lt;strong&gt;dev&lt;/strong&gt;, UINT64 &lt;strong&gt;ino&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;close&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;ERRNO &lt;strong&gt;res&lt;/strong&gt;, FD &lt;strong&gt;fd&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;No&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;read&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;ERRNO &lt;strong&gt;res&lt;/strong&gt;, BYTEBUF &lt;strong&gt;data&lt;/strong&gt;, FD &lt;strong&gt;fd&lt;/strong&gt;, UINT32 &lt;strong&gt;size&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;No&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;write&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;ERRNO &lt;strong&gt;res&lt;/strong&gt;, BYTEBUF &lt;strong&gt;data&lt;/strong&gt;, FD &lt;strong&gt;fd&lt;/strong&gt;, UINT32 &lt;strong&gt;size&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;socket&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;FD &lt;strong&gt;fd&lt;/strong&gt;, ENUMFLAGS32 &lt;strong&gt;domain&lt;/strong&gt;: &lt;em&gt;AF_NFC&lt;/em&gt;, &lt;em&gt;AF_ALG&lt;/em&gt;, &lt;em&gt;AF_CAIF&lt;/em&gt;, &lt;em&gt;AF_IEEE802154&lt;/em&gt;, &lt;em&gt;AF_PHONET&lt;/em&gt;, &lt;em&gt;AF_ISDN&lt;/em&gt;, &lt;em&gt;AF_RXRPC&lt;/em&gt;, &lt;em&gt;AF_IUCV&lt;/em&gt;, &lt;em&gt;AF_BLUETOOTH&lt;/em&gt;, &lt;em&gt;AF_TIPC&lt;/em&gt;, &lt;em&gt;AF_CAN&lt;/em&gt;, &lt;em&gt;AF_LLC&lt;/em&gt;, &lt;em&gt;AF_WANPIPE&lt;/em&gt;, &lt;em&gt;AF_PPPOX&lt;/em&gt;, &lt;em&gt;AF_IRDA&lt;/em&gt;, &lt;em&gt;AF_SNA&lt;/em&gt;, &lt;em&gt;AF_RDS&lt;/em&gt;, &lt;em&gt;AF_ATMSVC&lt;/em&gt;, &lt;em&gt;AF_ECONET&lt;/em&gt;, &lt;em&gt;AF_ASH&lt;/em&gt;, &lt;em&gt;AF_PACKET&lt;/em&gt;, &lt;em&gt;AF_ROUTE&lt;/em&gt;, &lt;em&gt;AF_NETLINK&lt;/em&gt;, &lt;em&gt;AF_KEY&lt;/em&gt;, &lt;em&gt;AF_SECURITY&lt;/em&gt;, &lt;em&gt;AF_NETBEUI&lt;/em&gt;, &lt;em&gt;AF_DECnet&lt;/em&gt;, &lt;em&gt;AF_ROSE&lt;/em&gt;, &lt;em&gt;AF_INET6&lt;/em&gt;, &lt;em&gt;AF_X25&lt;/em&gt;, &lt;em&gt;AF_ATMPVC&lt;/em&gt;, &lt;em&gt;AF_BRIDGE&lt;/em&gt;, &lt;em&gt;AF_NETROM&lt;/em&gt;, &lt;em&gt;AF_APPLETALK&lt;/em&gt;, &lt;em&gt;AF_IPX&lt;/em&gt;, &lt;em&gt;AF_AX25&lt;/em&gt;, &lt;em&gt;AF_INET&lt;/em&gt;, &lt;em&gt;AF_LOCAL&lt;/em&gt;, &lt;em&gt;AF_UNIX&lt;/em&gt;, &lt;em&gt;AF_UNSPEC&lt;/em&gt;, UINT32 &lt;strong&gt;type&lt;/strong&gt;, UINT32 &lt;strong&gt;proto&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;bind&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;ERRNO &lt;strong&gt;res&lt;/strong&gt;, SOCKADDR &lt;strong&gt;addr&lt;/strong&gt;, FD &lt;strong&gt;fd&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;connect&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;FD &lt;strong&gt;fd&lt;/strong&gt;, SOCKADDR &lt;strong&gt;addr&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;connect&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;ERRNO &lt;strong&gt;res&lt;/strong&gt;, SOCKTUPLE &lt;strong&gt;tuple&lt;/strong&gt;, FD &lt;strong&gt;fd&lt;/strong&gt;, SOCKADDR &lt;strong&gt;addr&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;listen&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;ERRNO &lt;strong&gt;res&lt;/strong&gt;, FD &lt;strong&gt;fd&lt;/strong&gt;, INT32 &lt;strong&gt;backlog&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;No&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;send&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;ERRNO &lt;strong&gt;res&lt;/strong&gt;, BYTEBUF &lt;strong&gt;data&lt;/strong&gt;, FD &lt;strong&gt;fd&lt;/strong&gt;, UINT32 &lt;strong&gt;size&lt;/strong&gt;, SOCKTUPLE &lt;strong&gt;tuple&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;sendto&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;ERRNO &lt;strong&gt;res&lt;/strong&gt;, BYTEBUF &lt;strong&gt;data&lt;/strong&gt;, FD &lt;strong&gt;fd&lt;/strong&gt;, UINT32 &lt;strong&gt;size&lt;/strong&gt;, SOCKTUPLE &lt;strong&gt;tuple&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;No&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;recv&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;ERRNO &lt;strong&gt;res&lt;/strong&gt;, BYTEBUF &lt;strong&gt;data&lt;/strong&gt;, FD &lt;strong&gt;fd&lt;/strong&gt;, UINT32 &lt;strong&gt;size&lt;/strong&gt;, SOCKTUPLE &lt;strong&gt;tuple&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;recvfrom&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;ERRNO &lt;strong&gt;res&lt;/strong&gt;, BYTEBUF &lt;strong&gt;data&lt;/strong&gt;, SOCKTUPLE &lt;strong&gt;tuple&lt;/strong&gt;, FD &lt;strong&gt;fd&lt;/strong&gt;, UINT32 &lt;strong&gt;size&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;shutdown&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;ERRNO &lt;strong&gt;res&lt;/strong&gt;, FD &lt;strong&gt;fd&lt;/strong&gt;, ENUMFLAGS8 &lt;strong&gt;how&lt;/strong&gt;: &lt;em&gt;SHUT_UNKNOWN&lt;/em&gt;, &lt;em&gt;SHUT_RDWR&lt;/em&gt;, &lt;em&gt;SHUT_WR&lt;/em&gt;, &lt;em&gt;SHUT_RD&lt;/em&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;getsockname&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;getpeername&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;socketpair&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;ERRNO &lt;strong&gt;res&lt;/strong&gt;, FD &lt;strong&gt;fd1&lt;/strong&gt;, FD &lt;strong&gt;fd2&lt;/strong&gt;, UINT64 &lt;strong&gt;source&lt;/strong&gt;, UINT64 &lt;strong&gt;peer&lt;/strong&gt;, ENUMFLAGS32 &lt;strong&gt;domain&lt;/strong&gt;: &lt;em&gt;AF_NFC&lt;/em&gt;, &lt;em&gt;AF_ALG&lt;/em&gt;, &lt;em&gt;AF_CAIF&lt;/em&gt;, &lt;em&gt;AF_IEEE802154&lt;/em&gt;, &lt;em&gt;AF_PHONET&lt;/em&gt;, &lt;em&gt;AF_ISDN&lt;/em&gt;, &lt;em&gt;AF_RXRPC&lt;/em&gt;, &lt;em&gt;AF_IUCV&lt;/em&gt;, &lt;em&gt;AF_BLUETOOTH&lt;/em&gt;, &lt;em&gt;AF_TIPC&lt;/em&gt;, &lt;em&gt;AF_CAN&lt;/em&gt;, &lt;em&gt;AF_LLC&lt;/em&gt;, &lt;em&gt;AF_WANPIPE&lt;/em&gt;, &lt;em&gt;AF_PPPOX&lt;/em&gt;, &lt;em&gt;AF_IRDA&lt;/em&gt;, &lt;em&gt;AF_SNA&lt;/em&gt;, &lt;em&gt;AF_RDS&lt;/em&gt;, &lt;em&gt;AF_ATMSVC&lt;/em&gt;, &lt;em&gt;AF_ECONET&lt;/em&gt;, &lt;em&gt;AF_ASH&lt;/em&gt;, &lt;em&gt;AF_PACKET&lt;/em&gt;, &lt;em&gt;AF_ROUTE&lt;/em&gt;, &lt;em&gt;AF_NETLINK&lt;/em&gt;, &lt;em&gt;AF_KEY&lt;/em&gt;, &lt;em&gt;AF_SECURITY&lt;/em&gt;, &lt;em&gt;AF_NETBEUI&lt;/em&gt;, &lt;em&gt;AF_DECnet&lt;/em&gt;, &lt;em&gt;AF_ROSE&lt;/em&gt;, &lt;em&gt;AF_INET6&lt;/em&gt;, &lt;em&gt;AF_X25&lt;/em&gt;, &lt;em&gt;AF_ATMPVC&lt;/em&gt;, &lt;em&gt;AF_BRIDGE&lt;/em&gt;, &lt;em&gt;AF_NETROM&lt;/em&gt;, &lt;em&gt;AF_APPLETALK&lt;/em&gt;, &lt;em&gt;AF_IPX&lt;/em&gt;, &lt;em&gt;AF_AX25&lt;/em&gt;, &lt;em&gt;AF_INET&lt;/em&gt;, &lt;em&gt;AF_LOCAL&lt;/em&gt;, &lt;em&gt;AF_UNIX&lt;/em&gt;, &lt;em&gt;AF_UNSPEC&lt;/em&gt;, UINT32 &lt;strong&gt;type&lt;/strong&gt;, UINT32 &lt;strong&gt;proto&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;setsockopt&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;ERRNO &lt;strong&gt;res&lt;/strong&gt;, FD &lt;strong&gt;fd&lt;/strong&gt;, ENUMFLAGS8 &lt;strong&gt;level&lt;/strong&gt;: &lt;em&gt;SOL_SOCKET&lt;/em&gt;, &lt;em&gt;SOL_TCP&lt;/em&gt;, &lt;em&gt;UNKNOWN&lt;/em&gt;, ENUMFLAGS8 &lt;strong&gt;optname&lt;/strong&gt;: &lt;em&gt;SO_COOKIE&lt;/em&gt;, &lt;em&gt;SO_MEMINFO&lt;/em&gt;, &lt;em&gt;SO_PEERGROUPS&lt;/em&gt;, &lt;em&gt;SO_ATTACH_BPF&lt;/em&gt;, &lt;em&gt;SO_INCOMING_CPU&lt;/em&gt;, &lt;em&gt;SO_BPF_EXTENSIONS&lt;/em&gt;, &lt;em&gt;SO_MAX_PACING_RATE&lt;/em&gt;, &lt;em&gt;SO_BUSY_POLL&lt;/em&gt;, &lt;em&gt;SO_SELECT_ERR_QUEUE&lt;/em&gt;, &lt;em&gt;SO_LOCK_FILTER&lt;/em&gt;, &lt;em&gt;SO_NOFCS&lt;/em&gt;, &lt;em&gt;SO_PEEK_OFF&lt;/em&gt;, &lt;em&gt;SO_WIFI_STATUS&lt;/em&gt;, &lt;em&gt;SO_RXQ_OVFL&lt;/em&gt;, &lt;em&gt;SO_DOMAIN&lt;/em&gt;, &lt;em&gt;SO_PROTOCOL&lt;/em&gt;, &lt;em&gt;SO_TIMESTAMPING&lt;/em&gt;, &lt;em&gt;SO_MARK&lt;/em&gt;, &lt;em&gt;SO_TIMESTAMPNS&lt;/em&gt;, &lt;em&gt;SO_PASSSEC&lt;/em&gt;, &lt;em&gt;SO_PEERSEC&lt;/em&gt;, &lt;em&gt;SO_ACCEPTCONN&lt;/em&gt;, &lt;em&gt;SO_TIMESTAMP&lt;/em&gt;, &lt;em&gt;SO_PEERNAME&lt;/em&gt;, &lt;em&gt;SO_DETACH_FILTER&lt;/em&gt;, &lt;em&gt;SO_ATTACH_FILTER&lt;/em&gt;, &lt;em&gt;SO_BINDTODEVICE&lt;/em&gt;, &lt;em&gt;SO_SECURITY_ENCRYPTION_NETWORK&lt;/em&gt;, &lt;em&gt;SO_SECURITY_ENCRYPTION_TRANSPORT&lt;/em&gt;, &lt;em&gt;SO_SECURITY_AUTHENTICATION&lt;/em&gt;, &lt;em&gt;SO_SNDTIMEO&lt;/em&gt;, &lt;em&gt;SO_RCVTIMEO&lt;/em&gt;, &lt;em&gt;SO_SNDLOWAT&lt;/em&gt;, &lt;em&gt;SO_RCVLOWAT&lt;/em&gt;, &lt;em&gt;SO_PEERCRED&lt;/em&gt;, &lt;em&gt;SO_PASSCRED&lt;/em&gt;, &lt;em&gt;SO_REUSEPORT&lt;/em&gt;, &lt;em&gt;SO_BSDCOMPAT&lt;/em&gt;, &lt;em&gt;SO_LINGER&lt;/em&gt;, &lt;em&gt;SO_PRIORITY&lt;/em&gt;, &lt;em&gt;SO_NO_CHECK&lt;/em&gt;, &lt;em&gt;SO_OOBINLINE&lt;/em&gt;, &lt;em&gt;SO_KEEPALIVE&lt;/em&gt;, &lt;em&gt;SO_RCVBUFFORCE&lt;/em&gt;, &lt;em&gt;SO_SNDBUFFORCE&lt;/em&gt;, &lt;em&gt;SO_RCVBUF&lt;/em&gt;, &lt;em&gt;SO_SNDBUF&lt;/em&gt;, &lt;em&gt;SO_BROADCAST&lt;/em&gt;, &lt;em&gt;SO_DONTROUTE&lt;/em&gt;, &lt;em&gt;SO_ERROR&lt;/em&gt;, &lt;em&gt;SO_TYPE&lt;/em&gt;, &lt;em&gt;SO_REUSEADDR&lt;/em&gt;, &lt;em&gt;SO_DEBUG&lt;/em&gt;, &lt;em&gt;UNKNOWN&lt;/em&gt;, DYNAMIC &lt;strong&gt;val&lt;/strong&gt;, UINT32 &lt;strong&gt;optlen&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;getsockopt&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;ERRNO &lt;strong&gt;res&lt;/strong&gt;, FD &lt;strong&gt;fd&lt;/strong&gt;, ENUMFLAGS8 &lt;strong&gt;level&lt;/strong&gt;: &lt;em&gt;SOL_SOCKET&lt;/em&gt;, &lt;em&gt;SOL_TCP&lt;/em&gt;, &lt;em&gt;UNKNOWN&lt;/em&gt;, ENUMFLAGS8 &lt;strong&gt;optname&lt;/strong&gt;: &lt;em&gt;SO_COOKIE&lt;/em&gt;, &lt;em&gt;SO_MEMINFO&lt;/em&gt;, &lt;em&gt;SO_PEERGROUPS&lt;/em&gt;, &lt;em&gt;SO_ATTACH_BPF&lt;/em&gt;, &lt;em&gt;SO_INCOMING_CPU&lt;/em&gt;, &lt;em&gt;SO_BPF_EXTENSIONS&lt;/em&gt;, &lt;em&gt;SO_MAX_PACING_RATE&lt;/em&gt;, &lt;em&gt;SO_BUSY_POLL&lt;/em&gt;, &lt;em&gt;SO_SELECT_ERR_QUEUE&lt;/em&gt;, &lt;em&gt;SO_LOCK_FILTER&lt;/em&gt;, &lt;em&gt;SO_NOFCS&lt;/em&gt;, &lt;em&gt;SO_PEEK_OFF&lt;/em&gt;, &lt;em&gt;SO_WIFI_STATUS&lt;/em&gt;, &lt;em&gt;SO_RXQ_OVFL&lt;/em&gt;, &lt;em&gt;SO_DOMAIN&lt;/em&gt;, &lt;em&gt;SO_PROTOCOL&lt;/em&gt;, &lt;em&gt;SO_TIMESTAMPING&lt;/em&gt;, &lt;em&gt;SO_MARK&lt;/em&gt;, &lt;em&gt;SO_TIMESTAMPNS&lt;/em&gt;, &lt;em&gt;SO_PASSSEC&lt;/em&gt;, &lt;em&gt;SO_PEERSEC&lt;/em&gt;, &lt;em&gt;SO_ACCEPTCONN&lt;/em&gt;, &lt;em&gt;SO_TIMESTAMP&lt;/em&gt;, &lt;em&gt;SO_PEERNAME&lt;/em&gt;, &lt;em&gt;SO_DETACH_FILTER&lt;/em&gt;, &lt;em&gt;SO_ATTACH_FILTER&lt;/em&gt;, &lt;em&gt;SO_BINDTODEVICE&lt;/em&gt;, &lt;em&gt;SO_SECURITY_ENCRYPTION_NETWORK&lt;/em&gt;, &lt;em&gt;SO_SECURITY_ENCRYPTION_TRANSPORT&lt;/em&gt;, &lt;em&gt;SO_SECURITY_AUTHENTICATION&lt;/em&gt;, &lt;em&gt;SO_SNDTIMEO&lt;/em&gt;, &lt;em&gt;SO_RCVTIMEO&lt;/em&gt;, &lt;em&gt;SO_SNDLOWAT&lt;/em&gt;, &lt;em&gt;SO_RCVLOWAT&lt;/em&gt;, &lt;em&gt;SO_PEERCRED&lt;/em&gt;, &lt;em&gt;SO_PASSCRED&lt;/em&gt;, &lt;em&gt;SO_REUSEPORT&lt;/em&gt;, &lt;em&gt;SO_BSDCOMPAT&lt;/em&gt;, &lt;em&gt;SO_LINGER&lt;/em&gt;, &lt;em&gt;SO_PRIORITY&lt;/em&gt;, &lt;em&gt;SO_NO_CHECK&lt;/em&gt;, &lt;em&gt;SO_OOBINLINE&lt;/em&gt;, &lt;em&gt;SO_KEEPALIVE&lt;/em&gt;, &lt;em&gt;SO_RCVBUFFORCE&lt;/em&gt;, &lt;em&gt;SO_SNDBUFFORCE&lt;/em&gt;, &lt;em&gt;SO_RCVBUF&lt;/em&gt;, &lt;em&gt;SO_SNDBUF&lt;/em&gt;, &lt;em&gt;SO_BROADCAST&lt;/em&gt;, &lt;em&gt;SO_DONTROUTE&lt;/em&gt;, &lt;em&gt;SO_ERROR&lt;/em&gt;, &lt;em&gt;SO_TYPE&lt;/em&gt;, &lt;em&gt;SO_REUSEADDR&lt;/em&gt;, &lt;em&gt;SO_DEBUG&lt;/em&gt;, &lt;em&gt;UNKNOWN&lt;/em&gt;, DYNAMIC &lt;strong&gt;val&lt;/strong&gt;, UINT32 &lt;strong&gt;optlen&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;sendmsg&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;ERRNO &lt;strong&gt;res&lt;/strong&gt;, BYTEBUF &lt;strong&gt;data&lt;/strong&gt;, FD &lt;strong&gt;fd&lt;/strong&gt;, UINT32 &lt;strong&gt;size&lt;/strong&gt;, SOCKTUPLE &lt;strong&gt;tuple&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;sendmmsg&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;ERRNO &lt;strong&gt;res&lt;/strong&gt;, FD &lt;strong&gt;fd&lt;/strong&gt;, UINT32 &lt;strong&gt;size&lt;/strong&gt;, BYTEBUF &lt;strong&gt;data&lt;/strong&gt;, SOCKTUPLE &lt;strong&gt;tuple&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;recvmsg&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;ERRNO &lt;strong&gt;res&lt;/strong&gt;, UINT32 &lt;strong&gt;size&lt;/strong&gt;, BYTEBUF &lt;strong&gt;data&lt;/strong&gt;, SOCKTUPLE &lt;strong&gt;tuple&lt;/strong&gt;, BYTEBUF &lt;strong&gt;msgcontrol&lt;/strong&gt;, FD &lt;strong&gt;fd&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;recvmmsg&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;ERRNO &lt;strong&gt;res&lt;/strong&gt;, FD &lt;strong&gt;fd&lt;/strong&gt;, UINT32 &lt;strong&gt;size&lt;/strong&gt;, BYTEBUF &lt;strong&gt;data&lt;/strong&gt;, SOCKTUPLE &lt;strong&gt;tuple&lt;/strong&gt;, BYTEBUF &lt;strong&gt;msgcontrol&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;creat&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;FSPATH &lt;strong&gt;name&lt;/strong&gt;, UINT32 &lt;strong&gt;mode&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;creat&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;FD &lt;strong&gt;fd&lt;/strong&gt;, FSPATH &lt;strong&gt;name&lt;/strong&gt;, UINT32 &lt;strong&gt;mode&lt;/strong&gt;, UINT32 &lt;strong&gt;dev&lt;/strong&gt;, UINT64 &lt;strong&gt;ino&lt;/strong&gt;, FLAGS16 &lt;strong&gt;creat_flags&lt;/strong&gt;: &lt;em&gt;FD_UPPER_LAYER_CREAT&lt;/em&gt;, &lt;em&gt;FD_LOWER_LAYER_CREAT&lt;/em&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;pipe&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;ERRNO &lt;strong&gt;res&lt;/strong&gt;, FD &lt;strong&gt;fd1&lt;/strong&gt;, FD &lt;strong&gt;fd2&lt;/strong&gt;, UINT64 &lt;strong&gt;ino&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;eventfd&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;FD &lt;strong&gt;res&lt;/strong&gt;, UINT64 &lt;strong&gt;initval&lt;/strong&gt;, UINT32 &lt;strong&gt;flags&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;futex&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;ERRNO &lt;strong&gt;res&lt;/strong&gt;, UINT64 &lt;strong&gt;addr&lt;/strong&gt;, FLAGS16 &lt;strong&gt;op&lt;/strong&gt;: &lt;em&gt;FUTEX_CLOCK_REALTIME&lt;/em&gt;, &lt;em&gt;FUTEX_PRIVATE_FLAG&lt;/em&gt;, &lt;em&gt;FUTEX_CMP_REQUEUE_PI&lt;/em&gt;, &lt;em&gt;FUTEX_WAIT_REQUEUE_PI&lt;/em&gt;, &lt;em&gt;FUTEX_WAKE_BITSET&lt;/em&gt;, &lt;em&gt;FUTEX_WAIT_BITSET&lt;/em&gt;, &lt;em&gt;FUTEX_TRYLOCK_PI&lt;/em&gt;, &lt;em&gt;FUTEX_UNLOCK_PI&lt;/em&gt;, &lt;em&gt;FUTEX_LOCK_PI&lt;/em&gt;, &lt;em&gt;FUTEX_WAKE_OP&lt;/em&gt;, &lt;em&gt;FUTEX_CMP_REQUEUE&lt;/em&gt;, &lt;em&gt;FUTEX_REQUEUE&lt;/em&gt;, &lt;em&gt;FUTEX_FD&lt;/em&gt;, &lt;em&gt;FUTEX_WAKE&lt;/em&gt;, &lt;em&gt;FUTEX_WAIT&lt;/em&gt;, UINT64 &lt;strong&gt;val&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;stat&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;ERRNO &lt;strong&gt;res&lt;/strong&gt;, FSPATH &lt;strong&gt;path&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;lstat&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;ERRNO &lt;strong&gt;res&lt;/strong&gt;, FSPATH &lt;strong&gt;path&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;fstat&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;ERRNO &lt;strong&gt;res&lt;/strong&gt;, FD &lt;strong&gt;fd&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;stat64&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;ERRNO &lt;strong&gt;res&lt;/strong&gt;, FSPATH &lt;strong&gt;path&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;lstat64&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;ERRNO &lt;strong&gt;res&lt;/strong&gt;, FSPATH &lt;strong&gt;path&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;fstat64&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;ERRNO &lt;strong&gt;res&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;epoll_wait&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;ERRNO &lt;strong&gt;res&lt;/strong&gt;, ERRNO &lt;strong&gt;maxevents&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;poll&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;ERRNO &lt;strong&gt;res&lt;/strong&gt;, FDLIST &lt;strong&gt;fds&lt;/strong&gt;, INT64 &lt;strong&gt;timeout&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;select&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;ERRNO &lt;strong&gt;res&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;lseek&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;ERRNO &lt;strong&gt;res&lt;/strong&gt;, FD &lt;strong&gt;fd&lt;/strong&gt;, UINT64 &lt;strong&gt;offset&lt;/strong&gt;, ENUMFLAGS8 &lt;strong&gt;whence&lt;/strong&gt;: &lt;em&gt;SEEK_END&lt;/em&gt;, &lt;em&gt;SEEK_CUR&lt;/em&gt;, &lt;em&gt;SEEK_SET&lt;/em&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;llseek&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;ERRNO &lt;strong&gt;res&lt;/strong&gt;, FD &lt;strong&gt;fd&lt;/strong&gt;, UINT64 &lt;strong&gt;offset&lt;/strong&gt;, ENUMFLAGS8 &lt;strong&gt;whence&lt;/strong&gt;: &lt;em&gt;SEEK_END&lt;/em&gt;, &lt;em&gt;SEEK_CUR&lt;/em&gt;, &lt;em&gt;SEEK_SET&lt;/em&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;getcwd&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;ERRNO &lt;strong&gt;res&lt;/strong&gt;, CHARBUF &lt;strong&gt;path&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;chdir&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;ERRNO &lt;strong&gt;res&lt;/strong&gt;, CHARBUF &lt;strong&gt;path&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;fchdir&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;ERRNO &lt;strong&gt;res&lt;/strong&gt;, FD &lt;strong&gt;fd&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;No&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;pread&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;ERRNO &lt;strong&gt;res&lt;/strong&gt;, BYTEBUF &lt;strong&gt;data&lt;/strong&gt;, FD &lt;strong&gt;fd&lt;/strong&gt;, UINT32 &lt;strong&gt;size&lt;/strong&gt;, UINT64 &lt;strong&gt;pos&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;No&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;pwrite&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;ERRNO &lt;strong&gt;res&lt;/strong&gt;, BYTEBUF &lt;strong&gt;data&lt;/strong&gt;, FD &lt;strong&gt;fd&lt;/strong&gt;, UINT32 &lt;strong&gt;size&lt;/strong&gt;, UINT64 &lt;strong&gt;pos&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;No&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;readv&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;ERRNO &lt;strong&gt;res&lt;/strong&gt;, UINT32 &lt;strong&gt;size&lt;/strong&gt;, BYTEBUF &lt;strong&gt;data&lt;/strong&gt;, FD &lt;strong&gt;fd&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;No&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;writev&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;ERRNO &lt;strong&gt;res&lt;/strong&gt;, BYTEBUF &lt;strong&gt;data&lt;/strong&gt;, FD &lt;strong&gt;fd&lt;/strong&gt;, UINT32 &lt;strong&gt;size&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;No&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;preadv&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;ERRNO &lt;strong&gt;res&lt;/strong&gt;, UINT32 &lt;strong&gt;size&lt;/strong&gt;, BYTEBUF &lt;strong&gt;data&lt;/strong&gt;, FD &lt;strong&gt;fd&lt;/strong&gt;, UINT64 &lt;strong&gt;pos&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;No&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;pwritev&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;ERRNO &lt;strong&gt;res&lt;/strong&gt;, BYTEBUF &lt;strong&gt;data&lt;/strong&gt;, FD &lt;strong&gt;fd&lt;/strong&gt;, UINT32 &lt;strong&gt;size&lt;/strong&gt;, UINT64 &lt;strong&gt;pos&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;signalfd&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;FD &lt;strong&gt;res&lt;/strong&gt;, FD &lt;strong&gt;fd&lt;/strong&gt;, UINT32 &lt;strong&gt;mask&lt;/strong&gt;, UINT8 &lt;strong&gt;flags&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;kill&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;ERRNO &lt;strong&gt;res&lt;/strong&gt;, PID &lt;strong&gt;pid&lt;/strong&gt;, SIGTYPE &lt;strong&gt;sig&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;tkill&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;ERRNO &lt;strong&gt;res&lt;/strong&gt;, PID &lt;strong&gt;tid&lt;/strong&gt;, SIGTYPE &lt;strong&gt;sig&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;tgkill&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;ERRNO &lt;strong&gt;res&lt;/strong&gt;, PID &lt;strong&gt;pid&lt;/strong&gt;, PID &lt;strong&gt;tid&lt;/strong&gt;, SIGTYPE &lt;strong&gt;sig&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;nanosleep&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;ERRNO &lt;strong&gt;res&lt;/strong&gt;, RELTIME &lt;strong&gt;interval&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;timerfd_create&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;FD &lt;strong&gt;res&lt;/strong&gt;, UINT8 &lt;strong&gt;clockid&lt;/strong&gt;, UINT8 &lt;strong&gt;flags&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;inotify_init&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;FD &lt;strong&gt;res&lt;/strong&gt;, UINT8 &lt;strong&gt;flags&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;getrlimit&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;ERRNO &lt;strong&gt;res&lt;/strong&gt;, INT64 &lt;strong&gt;cur&lt;/strong&gt;, INT64 &lt;strong&gt;max&lt;/strong&gt;, ENUMFLAGS8 &lt;strong&gt;resource&lt;/strong&gt;: &lt;em&gt;RLIMIT_UNKNOWN&lt;/em&gt;, &lt;em&gt;RLIMIT_RTTIME&lt;/em&gt;, &lt;em&gt;RLIMIT_RTPRIO&lt;/em&gt;, &lt;em&gt;RLIMIT_NICE&lt;/em&gt;, &lt;em&gt;RLIMIT_MSGQUEUE&lt;/em&gt;, &lt;em&gt;RLIMIT_SIGPENDING&lt;/em&gt;, &lt;em&gt;RLIMIT_LOCKS&lt;/em&gt;, &lt;em&gt;RLIMIT_AS&lt;/em&gt;, &lt;em&gt;RLIMIT_MEMLOCK&lt;/em&gt;, &lt;em&gt;RLIMIT_NOFILE&lt;/em&gt;, &lt;em&gt;RLIMIT_NPROC&lt;/em&gt;, &lt;em&gt;RLIMIT_RSS&lt;/em&gt;, &lt;em&gt;RLIMIT_CORE&lt;/em&gt;, &lt;em&gt;RLIMIT_STACK&lt;/em&gt;, &lt;em&gt;RLIMIT_DATA&lt;/em&gt;, &lt;em&gt;RLIMIT_FSIZE&lt;/em&gt;, &lt;em&gt;RLIMIT_CPU&lt;/em&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;setrlimit&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;ERRNO &lt;strong&gt;res&lt;/strong&gt;, INT64 &lt;strong&gt;cur&lt;/strong&gt;, INT64 &lt;strong&gt;max&lt;/strong&gt;, ENUMFLAGS8 &lt;strong&gt;resource&lt;/strong&gt;: &lt;em&gt;RLIMIT_UNKNOWN&lt;/em&gt;, &lt;em&gt;RLIMIT_RTTIME&lt;/em&gt;, &lt;em&gt;RLIMIT_RTPRIO&lt;/em&gt;, &lt;em&gt;RLIMIT_NICE&lt;/em&gt;, &lt;em&gt;RLIMIT_MSGQUEUE&lt;/em&gt;, &lt;em&gt;RLIMIT_SIGPENDING&lt;/em&gt;, &lt;em&gt;RLIMIT_LOCKS&lt;/em&gt;, &lt;em&gt;RLIMIT_AS&lt;/em&gt;, &lt;em&gt;RLIMIT_MEMLOCK&lt;/em&gt;, &lt;em&gt;RLIMIT_NOFILE&lt;/em&gt;, &lt;em&gt;RLIMIT_NPROC&lt;/em&gt;, &lt;em&gt;RLIMIT_RSS&lt;/em&gt;, &lt;em&gt;RLIMIT_CORE&lt;/em&gt;, &lt;em&gt;RLIMIT_STACK&lt;/em&gt;, &lt;em&gt;RLIMIT_DATA&lt;/em&gt;, &lt;em&gt;RLIMIT_FSIZE&lt;/em&gt;, &lt;em&gt;RLIMIT_CPU&lt;/em&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;prlimit&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;ERRNO &lt;strong&gt;res&lt;/strong&gt;, INT64 &lt;strong&gt;newcur&lt;/strong&gt;, INT64 &lt;strong&gt;newmax&lt;/strong&gt;, INT64 &lt;strong&gt;oldcur&lt;/strong&gt;, INT64 &lt;strong&gt;oldmax&lt;/strong&gt;, INT64 &lt;strong&gt;pid&lt;/strong&gt;, ENUMFLAGS8 &lt;strong&gt;resource&lt;/strong&gt;: &lt;em&gt;RLIMIT_UNKNOWN&lt;/em&gt;, &lt;em&gt;RLIMIT_RTTIME&lt;/em&gt;, &lt;em&gt;RLIMIT_RTPRIO&lt;/em&gt;, &lt;em&gt;RLIMIT_NICE&lt;/em&gt;, &lt;em&gt;RLIMIT_MSGQUEUE&lt;/em&gt;, &lt;em&gt;RLIMIT_SIGPENDING&lt;/em&gt;, &lt;em&gt;RLIMIT_LOCKS&lt;/em&gt;, &lt;em&gt;RLIMIT_AS&lt;/em&gt;, &lt;em&gt;RLIMIT_MEMLOCK&lt;/em&gt;, &lt;em&gt;RLIMIT_NOFILE&lt;/em&gt;, &lt;em&gt;RLIMIT_NPROC&lt;/em&gt;, &lt;em&gt;RLIMIT_RSS&lt;/em&gt;, &lt;em&gt;RLIMIT_CORE&lt;/em&gt;, &lt;em&gt;RLIMIT_STACK&lt;/em&gt;, &lt;em&gt;RLIMIT_DATA&lt;/em&gt;, &lt;em&gt;RLIMIT_FSIZE&lt;/em&gt;, &lt;em&gt;RLIMIT_CPU&lt;/em&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;fcntl&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;FD &lt;strong&gt;res&lt;/strong&gt;, FD &lt;strong&gt;fd&lt;/strong&gt;, ENUMFLAGS8 &lt;strong&gt;cmd&lt;/strong&gt;: &lt;em&gt;F_GETPIPE_SZ&lt;/em&gt;, &lt;em&gt;F_SETPIPE_SZ&lt;/em&gt;, &lt;em&gt;F_NOTIFY&lt;/em&gt;, &lt;em&gt;F_DUPFD_CLOEXEC&lt;/em&gt;, &lt;em&gt;F_CANCELLK&lt;/em&gt;, &lt;em&gt;F_GETLEASE&lt;/em&gt;, &lt;em&gt;F_SETLEASE&lt;/em&gt;, &lt;em&gt;F_GETOWN_EX&lt;/em&gt;, &lt;em&gt;F_SETOWN_EX&lt;/em&gt;, &lt;em&gt;F_SETLKW64&lt;/em&gt;, &lt;em&gt;F_SETLK64&lt;/em&gt;, &lt;em&gt;F_GETLK64&lt;/em&gt;, &lt;em&gt;F_GETSIG&lt;/em&gt;, &lt;em&gt;F_SETSIG&lt;/em&gt;, &lt;em&gt;F_GETOWN&lt;/em&gt;, &lt;em&gt;F_SETOWN&lt;/em&gt;, &lt;em&gt;F_SETLKW&lt;/em&gt;, &lt;em&gt;F_SETLK&lt;/em&gt;, &lt;em&gt;F_GETLK&lt;/em&gt;, &lt;em&gt;F_SETFL&lt;/em&gt;, &lt;em&gt;F_GETFL&lt;/em&gt;, &lt;em&gt;F_SETFD&lt;/em&gt;, &lt;em&gt;F_GETFD&lt;/em&gt;, &lt;em&gt;F_DUPFD&lt;/em&gt;, &lt;em&gt;F_OFD_GETLK&lt;/em&gt;, &lt;em&gt;F_OFD_SETLK&lt;/em&gt;, &lt;em&gt;F_OFD_SETLKW&lt;/em&gt;, &lt;em&gt;UNKNOWN&lt;/em&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;brk&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;UINT64 &lt;strong&gt;res&lt;/strong&gt;, UINT32 &lt;strong&gt;vm_size&lt;/strong&gt;, UINT32 &lt;strong&gt;vm_rss&lt;/strong&gt;, UINT32 &lt;strong&gt;vm_swap&lt;/strong&gt;, UINT64 &lt;strong&gt;addr&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;mmap&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;ERRNO &lt;strong&gt;res&lt;/strong&gt;, UINT32 &lt;strong&gt;vm_size&lt;/strong&gt;, UINT32 &lt;strong&gt;vm_rss&lt;/strong&gt;, UINT32 &lt;strong&gt;vm_swap&lt;/strong&gt;, UINT64 &lt;strong&gt;addr&lt;/strong&gt;, UINT64 &lt;strong&gt;length&lt;/strong&gt;, FLAGS32 &lt;strong&gt;prot&lt;/strong&gt;: &lt;em&gt;PROT_READ&lt;/em&gt;, &lt;em&gt;PROT_WRITE&lt;/em&gt;, &lt;em&gt;PROT_EXEC&lt;/em&gt;, &lt;em&gt;PROT_SEM&lt;/em&gt;, &lt;em&gt;PROT_GROWSDOWN&lt;/em&gt;, &lt;em&gt;PROT_GROWSUP&lt;/em&gt;, &lt;em&gt;PROT_SAO&lt;/em&gt;, &lt;em&gt;PROT_NONE&lt;/em&gt;, FLAGS32 &lt;strong&gt;flags&lt;/strong&gt;: &lt;em&gt;MAP_SHARED&lt;/em&gt;, &lt;em&gt;MAP_PRIVATE&lt;/em&gt;, &lt;em&gt;MAP_FIXED&lt;/em&gt;, &lt;em&gt;MAP_ANONYMOUS&lt;/em&gt;, &lt;em&gt;MAP_32BIT&lt;/em&gt;, &lt;em&gt;MAP_RENAME&lt;/em&gt;, &lt;em&gt;MAP_NORESERVE&lt;/em&gt;, &lt;em&gt;MAP_POPULATE&lt;/em&gt;, &lt;em&gt;MAP_NONBLOCK&lt;/em&gt;, &lt;em&gt;MAP_GROWSDOWN&lt;/em&gt;, &lt;em&gt;MAP_DENYWRITE&lt;/em&gt;, &lt;em&gt;MAP_EXECUTABLE&lt;/em&gt;, &lt;em&gt;MAP_INHERIT&lt;/em&gt;, &lt;em&gt;MAP_FILE&lt;/em&gt;, &lt;em&gt;MAP_LOCKED&lt;/em&gt;, FD &lt;strong&gt;fd&lt;/strong&gt;, UINT64 &lt;strong&gt;offset&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;mmap2&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;ERRNO &lt;strong&gt;res&lt;/strong&gt;, UINT32 &lt;strong&gt;vm_size&lt;/strong&gt;, UINT32 &lt;strong&gt;vm_rss&lt;/strong&gt;, UINT32 &lt;strong&gt;vm_swap&lt;/strong&gt;, UINT64 &lt;strong&gt;addr&lt;/strong&gt;, UINT64 &lt;strong&gt;length&lt;/strong&gt;, FLAGS32 &lt;strong&gt;prot&lt;/strong&gt;: &lt;em&gt;PROT_READ&lt;/em&gt;, &lt;em&gt;PROT_WRITE&lt;/em&gt;, &lt;em&gt;PROT_EXEC&lt;/em&gt;, &lt;em&gt;PROT_SEM&lt;/em&gt;, &lt;em&gt;PROT_GROWSDOWN&lt;/em&gt;, &lt;em&gt;PROT_GROWSUP&lt;/em&gt;, &lt;em&gt;PROT_SAO&lt;/em&gt;, &lt;em&gt;PROT_NONE&lt;/em&gt;, FLAGS32 &lt;strong&gt;flags&lt;/strong&gt;: &lt;em&gt;MAP_SHARED&lt;/em&gt;, &lt;em&gt;MAP_PRIVATE&lt;/em&gt;, &lt;em&gt;MAP_FIXED&lt;/em&gt;, &lt;em&gt;MAP_ANONYMOUS&lt;/em&gt;, &lt;em&gt;MAP_32BIT&lt;/em&gt;, &lt;em&gt;MAP_RENAME&lt;/em&gt;, &lt;em&gt;MAP_NORESERVE&lt;/em&gt;, &lt;em&gt;MAP_POPULATE&lt;/em&gt;, &lt;em&gt;MAP_NONBLOCK&lt;/em&gt;, &lt;em&gt;MAP_GROWSDOWN&lt;/em&gt;, &lt;em&gt;MAP_DENYWRITE&lt;/em&gt;, &lt;em&gt;MAP_EXECUTABLE&lt;/em&gt;, &lt;em&gt;MAP_INHERIT&lt;/em&gt;, &lt;em&gt;MAP_FILE&lt;/em&gt;, &lt;em&gt;MAP_LOCKED&lt;/em&gt;, FD &lt;strong&gt;fd&lt;/strong&gt;, UINT64 &lt;strong&gt;pgoffset&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;munmap&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;ERRNO &lt;strong&gt;res&lt;/strong&gt;, UINT32 &lt;strong&gt;vm_size&lt;/strong&gt;, UINT32 &lt;strong&gt;vm_rss&lt;/strong&gt;, UINT32 &lt;strong&gt;vm_swap&lt;/strong&gt;, UINT64 &lt;strong&gt;addr&lt;/strong&gt;, UINT64 &lt;strong&gt;length&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;splice&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;ERRNO &lt;strong&gt;res&lt;/strong&gt;, FD &lt;strong&gt;fd_in&lt;/strong&gt;, FD &lt;strong&gt;fd_out&lt;/strong&gt;, UINT64 &lt;strong&gt;size&lt;/strong&gt;, FLAGS32 &lt;strong&gt;flags&lt;/strong&gt;: &lt;em&gt;SPLICE_F_MOVE&lt;/em&gt;, &lt;em&gt;SPLICE_F_NONBLOCK&lt;/em&gt;, &lt;em&gt;SPLICE_F_MORE&lt;/em&gt;, &lt;em&gt;SPLICE_F_GIFT&lt;/em&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;ptrace&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;ERRNO &lt;strong&gt;res&lt;/strong&gt;, DYNAMIC &lt;strong&gt;addr&lt;/strong&gt;, DYNAMIC &lt;strong&gt;data&lt;/strong&gt;, ENUMFLAGS16 &lt;strong&gt;request&lt;/strong&gt;: &lt;em&gt;PTRACE_SINGLEBLOCK&lt;/em&gt;, &lt;em&gt;PTRACE_SYSEMU_SINGLESTEP&lt;/em&gt;, &lt;em&gt;PTRACE_SYSEMU&lt;/em&gt;, &lt;em&gt;PTRACE_ARCH_PRCTL&lt;/em&gt;, &lt;em&gt;PTRACE_SET_THREAD_AREA&lt;/em&gt;, &lt;em&gt;PTRACE_GET_THREAD_AREA&lt;/em&gt;, &lt;em&gt;PTRACE_OLDSETOPTIONS&lt;/em&gt;, &lt;em&gt;PTRACE_SETFPXREGS&lt;/em&gt;, &lt;em&gt;PTRACE_GETFPXREGS&lt;/em&gt;, &lt;em&gt;PTRACE_SETFPREGS&lt;/em&gt;, &lt;em&gt;PTRACE_GETFPREGS&lt;/em&gt;, &lt;em&gt;PTRACE_SETREGS&lt;/em&gt;, &lt;em&gt;PTRACE_GETREGS&lt;/em&gt;, &lt;em&gt;PTRACE_SETSIGMASK&lt;/em&gt;, &lt;em&gt;PTRACE_GETSIGMASK&lt;/em&gt;, &lt;em&gt;PTRACE_PEEKSIGINFO&lt;/em&gt;, &lt;em&gt;PTRACE_LISTEN&lt;/em&gt;, &lt;em&gt;PTRACE_INTERRUPT&lt;/em&gt;, &lt;em&gt;PTRACE_SEIZE&lt;/em&gt;, &lt;em&gt;PTRACE_SETREGSET&lt;/em&gt;, &lt;em&gt;PTRACE_GETREGSET&lt;/em&gt;, &lt;em&gt;PTRACE_SETSIGINFO&lt;/em&gt;, &lt;em&gt;PTRACE_GETSIGINFO&lt;/em&gt;, &lt;em&gt;PTRACE_GETEVENTMSG&lt;/em&gt;, &lt;em&gt;PTRACE_SETOPTIONS&lt;/em&gt;, &lt;em&gt;PTRACE_SYSCALL&lt;/em&gt;, &lt;em&gt;PTRACE_DETACH&lt;/em&gt;, &lt;em&gt;PTRACE_ATTACH&lt;/em&gt;, &lt;em&gt;PTRACE_SINGLESTEP&lt;/em&gt;, &lt;em&gt;PTRACE_KILL&lt;/em&gt;, &lt;em&gt;PTRACE_CONT&lt;/em&gt;, &lt;em&gt;PTRACE_POKEUSR&lt;/em&gt;, &lt;em&gt;PTRACE_POKEDATA&lt;/em&gt;, &lt;em&gt;PTRACE_POKETEXT&lt;/em&gt;, &lt;em&gt;PTRACE_PEEKUSR&lt;/em&gt;, &lt;em&gt;PTRACE_PEEKDATA&lt;/em&gt;, &lt;em&gt;PTRACE_PEEKTEXT&lt;/em&gt;, &lt;em&gt;PTRACE_TRACEME&lt;/em&gt;, &lt;em&gt;PTRACE_UNKNOWN&lt;/em&gt;, PID &lt;strong&gt;pid&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;ioctl&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;ERRNO &lt;strong&gt;res&lt;/strong&gt;, FD &lt;strong&gt;fd&lt;/strong&gt;, UINT64 &lt;strong&gt;request&lt;/strong&gt;, UINT64 &lt;strong&gt;argument&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;rename&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;ERRNO &lt;strong&gt;res&lt;/strong&gt;, FSPATH &lt;strong&gt;oldpath&lt;/strong&gt;, FSPATH &lt;strong&gt;newpath&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;renameat&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;ERRNO &lt;strong&gt;res&lt;/strong&gt;, FD &lt;strong&gt;olddirfd&lt;/strong&gt;, FSRELPATH &lt;strong&gt;oldpath&lt;/strong&gt;, FD &lt;strong&gt;newdirfd&lt;/strong&gt;, FSRELPATH &lt;strong&gt;newpath&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;symlink&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;ERRNO &lt;strong&gt;res&lt;/strong&gt;, CHARBUF &lt;strong&gt;target&lt;/strong&gt;, FSPATH &lt;strong&gt;linkpath&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;symlinkat&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;ERRNO &lt;strong&gt;res&lt;/strong&gt;, CHARBUF &lt;strong&gt;target&lt;/strong&gt;, FD &lt;strong&gt;linkdirfd&lt;/strong&gt;, FSRELPATH &lt;strong&gt;linkpath&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;No&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;sendfile&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;ERRNO &lt;strong&gt;res&lt;/strong&gt;, UINT64 &lt;strong&gt;offset&lt;/strong&gt;, FD &lt;strong&gt;out_fd&lt;/strong&gt;, FD &lt;strong&gt;in_fd&lt;/strong&gt;, UINT64 &lt;strong&gt;size&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;quotactl&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;ERRNO &lt;strong&gt;res&lt;/strong&gt;, CHARBUF &lt;strong&gt;special&lt;/strong&gt;, CHARBUF &lt;strong&gt;quotafilepath&lt;/strong&gt;, UINT64 &lt;strong&gt;dqb_bhardlimit&lt;/strong&gt;, UINT64 &lt;strong&gt;dqb_bsoftlimit&lt;/strong&gt;, UINT64 &lt;strong&gt;dqb_curspace&lt;/strong&gt;, UINT64 &lt;strong&gt;dqb_ihardlimit&lt;/strong&gt;, UINT64 &lt;strong&gt;dqb_isoftlimit&lt;/strong&gt;, RELTIME &lt;strong&gt;dqb_btime&lt;/strong&gt;, RELTIME &lt;strong&gt;dqb_itime&lt;/strong&gt;, RELTIME &lt;strong&gt;dqi_bgrace&lt;/strong&gt;, RELTIME &lt;strong&gt;dqi_igrace&lt;/strong&gt;, FLAGS8 &lt;strong&gt;dqi_flags&lt;/strong&gt;: &lt;em&gt;DQF_NONE&lt;/em&gt;, &lt;em&gt;V1_DQF_RSQUASH&lt;/em&gt;, FLAGS8 &lt;strong&gt;quota_fmt_out&lt;/strong&gt;: &lt;em&gt;QFMT_NOT_USED&lt;/em&gt;, &lt;em&gt;QFMT_VFS_OLD&lt;/em&gt;, &lt;em&gt;QFMT_VFS_V0&lt;/em&gt;, &lt;em&gt;QFMT_VFS_V1&lt;/em&gt;, FLAGS16 &lt;strong&gt;cmd&lt;/strong&gt;: &lt;em&gt;Q_QUOTAON&lt;/em&gt;, &lt;em&gt;Q_QUOTAOFF&lt;/em&gt;, &lt;em&gt;Q_GETFMT&lt;/em&gt;, &lt;em&gt;Q_GETINFO&lt;/em&gt;, &lt;em&gt;Q_SETINFO&lt;/em&gt;, &lt;em&gt;Q_GETQUOTA&lt;/em&gt;, &lt;em&gt;Q_SETQUOTA&lt;/em&gt;, &lt;em&gt;Q_SYNC&lt;/em&gt;, &lt;em&gt;Q_XQUOTAON&lt;/em&gt;, &lt;em&gt;Q_XQUOTAOFF&lt;/em&gt;, &lt;em&gt;Q_XGETQUOTA&lt;/em&gt;, &lt;em&gt;Q_XSETQLIM&lt;/em&gt;, &lt;em&gt;Q_XGETQSTAT&lt;/em&gt;, &lt;em&gt;Q_XQUOTARM&lt;/em&gt;, &lt;em&gt;Q_XQUOTASYNC&lt;/em&gt;, FLAGS8 &lt;strong&gt;type&lt;/strong&gt;: &lt;em&gt;USRQUOTA&lt;/em&gt;, &lt;em&gt;GRPQUOTA&lt;/em&gt;, UINT32 &lt;strong&gt;id&lt;/strong&gt;, FLAGS8 &lt;strong&gt;quota_fmt&lt;/strong&gt;: &lt;em&gt;QFMT_NOT_USED&lt;/em&gt;, &lt;em&gt;QFMT_VFS_OLD&lt;/em&gt;, &lt;em&gt;QFMT_VFS_V0&lt;/em&gt;, &lt;em&gt;QFMT_VFS_V1&lt;/em&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;setresuid&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;ERRNO &lt;strong&gt;res&lt;/strong&gt;, UID &lt;strong&gt;ruid&lt;/strong&gt;, UID &lt;strong&gt;euid&lt;/strong&gt;, UID &lt;strong&gt;suid&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;setresgid&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;ERRNO &lt;strong&gt;res&lt;/strong&gt;, GID &lt;strong&gt;rgid&lt;/strong&gt;, GID &lt;strong&gt;egid&lt;/strong&gt;, GID &lt;strong&gt;sgid&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;setuid&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;ERRNO &lt;strong&gt;res&lt;/strong&gt;, UID &lt;strong&gt;uid&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;setgid&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;ERRNO &lt;strong&gt;res&lt;/strong&gt;, GID &lt;strong&gt;gid&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;getuid&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;UID &lt;strong&gt;uid&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;geteuid&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;UID &lt;strong&gt;euid&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;getgid&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;GID &lt;strong&gt;gid&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;getegid&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;GID &lt;strong&gt;egid&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;getresuid&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;ERRNO &lt;strong&gt;res&lt;/strong&gt;, UID &lt;strong&gt;ruid&lt;/strong&gt;, UID &lt;strong&gt;euid&lt;/strong&gt;, UID &lt;strong&gt;suid&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;getresgid&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;ERRNO &lt;strong&gt;res&lt;/strong&gt;, GID &lt;strong&gt;rgid&lt;/strong&gt;, GID &lt;strong&gt;egid&lt;/strong&gt;, GID &lt;strong&gt;sgid&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;clone&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;PID &lt;strong&gt;res&lt;/strong&gt;, CHARBUF &lt;strong&gt;exe&lt;/strong&gt;, BYTEBUF &lt;strong&gt;args&lt;/strong&gt;, PID &lt;strong&gt;tid&lt;/strong&gt;, PID &lt;strong&gt;pid&lt;/strong&gt;, PID &lt;strong&gt;ptid&lt;/strong&gt;, CHARBUF &lt;strong&gt;cwd&lt;/strong&gt;, INT64 &lt;strong&gt;fdlimit&lt;/strong&gt;, UINT64 &lt;strong&gt;pgft_maj&lt;/strong&gt;, UINT64 &lt;strong&gt;pgft_min&lt;/strong&gt;, UINT32 &lt;strong&gt;vm_size&lt;/strong&gt;, UINT32 &lt;strong&gt;vm_rss&lt;/strong&gt;, UINT32 &lt;strong&gt;vm_swap&lt;/strong&gt;, CHARBUF &lt;strong&gt;comm&lt;/strong&gt;, BYTEBUF &lt;strong&gt;cgroups&lt;/strong&gt;, FLAGS32 &lt;strong&gt;flags&lt;/strong&gt;: &lt;em&gt;CLONE_FILES&lt;/em&gt;, &lt;em&gt;CLONE_FS&lt;/em&gt;, &lt;em&gt;CLONE_IO&lt;/em&gt;, &lt;em&gt;CLONE_NEWIPC&lt;/em&gt;, &lt;em&gt;CLONE_NEWNET&lt;/em&gt;, &lt;em&gt;CLONE_NEWNS&lt;/em&gt;, &lt;em&gt;CLONE_NEWPID&lt;/em&gt;, &lt;em&gt;CLONE_NEWUTS&lt;/em&gt;, &lt;em&gt;CLONE_PARENT&lt;/em&gt;, &lt;em&gt;CLONE_PARENT_SETTID&lt;/em&gt;, &lt;em&gt;CLONE_PTRACE&lt;/em&gt;, &lt;em&gt;CLONE_SIGHAND&lt;/em&gt;, &lt;em&gt;CLONE_SYSVSEM&lt;/em&gt;, &lt;em&gt;CLONE_THREAD&lt;/em&gt;, &lt;em&gt;CLONE_UNTRACED&lt;/em&gt;, &lt;em&gt;CLONE_VM&lt;/em&gt;, &lt;em&gt;CLONE_INVERTED&lt;/em&gt;, &lt;em&gt;NAME_CHANGED&lt;/em&gt;, &lt;em&gt;CLOSED&lt;/em&gt;, &lt;em&gt;CLONE_NEWUSER&lt;/em&gt;, &lt;em&gt;CLONE_CHILD_CLEARTID&lt;/em&gt;, &lt;em&gt;CLONE_CHILD_SETTID&lt;/em&gt;, &lt;em&gt;CLONE_SETTLS&lt;/em&gt;, &lt;em&gt;CLONE_STOPPED&lt;/em&gt;, &lt;em&gt;CLONE_VFORK&lt;/em&gt;, &lt;em&gt;CLONE_NEWCGROUP&lt;/em&gt;, &lt;em&gt;CLONE_CHILD_IN_PIDNS&lt;/em&gt;, UINT32 &lt;strong&gt;uid&lt;/strong&gt;, UINT32 &lt;strong&gt;gid&lt;/strong&gt;, PID &lt;strong&gt;vtid&lt;/strong&gt;, PID &lt;strong&gt;vpid&lt;/strong&gt;, UINT64 &lt;strong&gt;pidns_init_start_ts&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;fork&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;PID &lt;strong&gt;res&lt;/strong&gt;, CHARBUF &lt;strong&gt;exe&lt;/strong&gt;, BYTEBUF &lt;strong&gt;args&lt;/strong&gt;, PID &lt;strong&gt;tid&lt;/strong&gt;, PID &lt;strong&gt;pid&lt;/strong&gt;, PID &lt;strong&gt;ptid&lt;/strong&gt;, CHARBUF &lt;strong&gt;cwd&lt;/strong&gt;, INT64 &lt;strong&gt;fdlimit&lt;/strong&gt;, UINT64 &lt;strong&gt;pgft_maj&lt;/strong&gt;, UINT64 &lt;strong&gt;pgft_min&lt;/strong&gt;, UINT32 &lt;strong&gt;vm_size&lt;/strong&gt;, UINT32 &lt;strong&gt;vm_rss&lt;/strong&gt;, UINT32 &lt;strong&gt;vm_swap&lt;/strong&gt;, CHARBUF &lt;strong&gt;comm&lt;/strong&gt;, BYTEBUF &lt;strong&gt;cgroups&lt;/strong&gt;, FLAGS32 &lt;strong&gt;flags&lt;/strong&gt;: &lt;em&gt;CLONE_FILES&lt;/em&gt;, &lt;em&gt;CLONE_FS&lt;/em&gt;, &lt;em&gt;CLONE_IO&lt;/em&gt;, &lt;em&gt;CLONE_NEWIPC&lt;/em&gt;, &lt;em&gt;CLONE_NEWNET&lt;/em&gt;, &lt;em&gt;CLONE_NEWNS&lt;/em&gt;, &lt;em&gt;CLONE_NEWPID&lt;/em&gt;, &lt;em&gt;CLONE_NEWUTS&lt;/em&gt;, &lt;em&gt;CLONE_PARENT&lt;/em&gt;, &lt;em&gt;CLONE_PARENT_SETTID&lt;/em&gt;, &lt;em&gt;CLONE_PTRACE&lt;/em&gt;, &lt;em&gt;CLONE_SIGHAND&lt;/em&gt;, &lt;em&gt;CLONE_SYSVSEM&lt;/em&gt;, &lt;em&gt;CLONE_THREAD&lt;/em&gt;, &lt;em&gt;CLONE_UNTRACED&lt;/em&gt;, &lt;em&gt;CLONE_VM&lt;/em&gt;, &lt;em&gt;CLONE_INVERTED&lt;/em&gt;, &lt;em&gt;NAME_CHANGED&lt;/em&gt;, &lt;em&gt;CLOSED&lt;/em&gt;, &lt;em&gt;CLONE_NEWUSER&lt;/em&gt;, &lt;em&gt;CLONE_CHILD_CLEARTID&lt;/em&gt;, &lt;em&gt;CLONE_CHILD_SETTID&lt;/em&gt;, &lt;em&gt;CLONE_SETTLS&lt;/em&gt;, &lt;em&gt;CLONE_STOPPED&lt;/em&gt;, &lt;em&gt;CLONE_VFORK&lt;/em&gt;, &lt;em&gt;CLONE_NEWCGROUP&lt;/em&gt;, &lt;em&gt;CLONE_CHILD_IN_PIDNS&lt;/em&gt;, UINT32 &lt;strong&gt;uid&lt;/strong&gt;, UINT32 &lt;strong&gt;gid&lt;/strong&gt;, PID &lt;strong&gt;vtid&lt;/strong&gt;, PID &lt;strong&gt;vpid&lt;/strong&gt;, UINT64 &lt;strong&gt;pidns_init_start_ts&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;vfork&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;PID &lt;strong&gt;res&lt;/strong&gt;, CHARBUF &lt;strong&gt;exe&lt;/strong&gt;, BYTEBUF &lt;strong&gt;args&lt;/strong&gt;, PID &lt;strong&gt;tid&lt;/strong&gt;, PID &lt;strong&gt;pid&lt;/strong&gt;, PID &lt;strong&gt;ptid&lt;/strong&gt;, CHARBUF &lt;strong&gt;cwd&lt;/strong&gt;, INT64 &lt;strong&gt;fdlimit&lt;/strong&gt;, UINT64 &lt;strong&gt;pgft_maj&lt;/strong&gt;, UINT64 &lt;strong&gt;pgft_min&lt;/strong&gt;, UINT32 &lt;strong&gt;vm_size&lt;/strong&gt;, UINT32 &lt;strong&gt;vm_rss&lt;/strong&gt;, UINT32 &lt;strong&gt;vm_swap&lt;/strong&gt;, CHARBUF &lt;strong&gt;comm&lt;/strong&gt;, BYTEBUF &lt;strong&gt;cgroups&lt;/strong&gt;, FLAGS32 &lt;strong&gt;flags&lt;/strong&gt;: &lt;em&gt;CLONE_FILES&lt;/em&gt;, &lt;em&gt;CLONE_FS&lt;/em&gt;, &lt;em&gt;CLONE_IO&lt;/em&gt;, &lt;em&gt;CLONE_NEWIPC&lt;/em&gt;, &lt;em&gt;CLONE_NEWNET&lt;/em&gt;, &lt;em&gt;CLONE_NEWNS&lt;/em&gt;, &lt;em&gt;CLONE_NEWPID&lt;/em&gt;, &lt;em&gt;CLONE_NEWUTS&lt;/em&gt;, &lt;em&gt;CLONE_PARENT&lt;/em&gt;, &lt;em&gt;CLONE_PARENT_SETTID&lt;/em&gt;, &lt;em&gt;CLONE_PTRACE&lt;/em&gt;, &lt;em&gt;CLONE_SIGHAND&lt;/em&gt;, &lt;em&gt;CLONE_SYSVSEM&lt;/em&gt;, &lt;em&gt;CLONE_THREAD&lt;/em&gt;, &lt;em&gt;CLONE_UNTRACED&lt;/em&gt;, &lt;em&gt;CLONE_VM&lt;/em&gt;, &lt;em&gt;CLONE_INVERTED&lt;/em&gt;, &lt;em&gt;NAME_CHANGED&lt;/em&gt;, &lt;em&gt;CLOSED&lt;/em&gt;, &lt;em&gt;CLONE_NEWUSER&lt;/em&gt;, &lt;em&gt;CLONE_CHILD_CLEARTID&lt;/em&gt;, &lt;em&gt;CLONE_CHILD_SETTID&lt;/em&gt;, &lt;em&gt;CLONE_SETTLS&lt;/em&gt;, &lt;em&gt;CLONE_STOPPED&lt;/em&gt;, &lt;em&gt;CLONE_VFORK&lt;/em&gt;, &lt;em&gt;CLONE_NEWCGROUP&lt;/em&gt;, &lt;em&gt;CLONE_CHILD_IN_PIDNS&lt;/em&gt;, UINT32 &lt;strong&gt;uid&lt;/strong&gt;, UINT32 &lt;strong&gt;gid&lt;/strong&gt;, PID &lt;strong&gt;vtid&lt;/strong&gt;, PID &lt;strong&gt;vpid&lt;/strong&gt;, UINT64 &lt;strong&gt;pidns_init_start_ts&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;getdents&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;ERRNO &lt;strong&gt;res&lt;/strong&gt;, FD &lt;strong&gt;fd&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;getdents64&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;ERRNO &lt;strong&gt;res&lt;/strong&gt;, FD &lt;strong&gt;fd&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;setns&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;ERRNO &lt;strong&gt;res&lt;/strong&gt;, FD &lt;strong&gt;fd&lt;/strong&gt;, FLAGS32 &lt;strong&gt;nstype&lt;/strong&gt;: &lt;em&gt;CLONE_FILES&lt;/em&gt;, &lt;em&gt;CLONE_FS&lt;/em&gt;, &lt;em&gt;CLONE_IO&lt;/em&gt;, &lt;em&gt;CLONE_NEWIPC&lt;/em&gt;, &lt;em&gt;CLONE_NEWNET&lt;/em&gt;, &lt;em&gt;CLONE_NEWNS&lt;/em&gt;, &lt;em&gt;CLONE_NEWPID&lt;/em&gt;, &lt;em&gt;CLONE_NEWUTS&lt;/em&gt;, &lt;em&gt;CLONE_PARENT&lt;/em&gt;, &lt;em&gt;CLONE_PARENT_SETTID&lt;/em&gt;, &lt;em&gt;CLONE_PTRACE&lt;/em&gt;, &lt;em&gt;CLONE_SIGHAND&lt;/em&gt;, &lt;em&gt;CLONE_SYSVSEM&lt;/em&gt;, &lt;em&gt;CLONE_THREAD&lt;/em&gt;, &lt;em&gt;CLONE_UNTRACED&lt;/em&gt;, &lt;em&gt;CLONE_VM&lt;/em&gt;, &lt;em&gt;CLONE_INVERTED&lt;/em&gt;, &lt;em&gt;NAME_CHANGED&lt;/em&gt;, &lt;em&gt;CLOSED&lt;/em&gt;, &lt;em&gt;CLONE_NEWUSER&lt;/em&gt;, &lt;em&gt;CLONE_CHILD_CLEARTID&lt;/em&gt;, &lt;em&gt;CLONE_CHILD_SETTID&lt;/em&gt;, &lt;em&gt;CLONE_SETTLS&lt;/em&gt;, &lt;em&gt;CLONE_STOPPED&lt;/em&gt;, &lt;em&gt;CLONE_VFORK&lt;/em&gt;, &lt;em&gt;CLONE_NEWCGROUP&lt;/em&gt;, &lt;em&gt;CLONE_CHILD_IN_PIDNS&lt;/em&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;flock&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;ERRNO &lt;strong&gt;res&lt;/strong&gt;, FD &lt;strong&gt;fd&lt;/strong&gt;, FLAGS32 &lt;strong&gt;operation&lt;/strong&gt;: &lt;em&gt;LOCK_SH&lt;/em&gt;, &lt;em&gt;LOCK_EX&lt;/em&gt;, &lt;em&gt;LOCK_NB&lt;/em&gt;, &lt;em&gt;LOCK_UN&lt;/em&gt;, &lt;em&gt;LOCK_NONE&lt;/em&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;accept&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;FD &lt;strong&gt;fd&lt;/strong&gt;, SOCKTUPLE &lt;strong&gt;tuple&lt;/strong&gt;, UINT8 &lt;strong&gt;queuepct&lt;/strong&gt;, UINT32 &lt;strong&gt;queuelen&lt;/strong&gt;, UINT32 &lt;strong&gt;queuemax&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;semop&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;ERRNO &lt;strong&gt;res&lt;/strong&gt;, UINT32 &lt;strong&gt;nsops&lt;/strong&gt;, UINT16 &lt;strong&gt;sem_num_0&lt;/strong&gt;, INT16 &lt;strong&gt;sem_op_0&lt;/strong&gt;, FLAGS16 &lt;strong&gt;sem_flg_0&lt;/strong&gt;: &lt;em&gt;IPC_NOWAIT&lt;/em&gt;, &lt;em&gt;SEM_UNDO&lt;/em&gt;, UINT16 &lt;strong&gt;sem_num_1&lt;/strong&gt;, INT16 &lt;strong&gt;sem_op_1&lt;/strong&gt;, FLAGS16 &lt;strong&gt;sem_flg_1&lt;/strong&gt;: &lt;em&gt;IPC_NOWAIT&lt;/em&gt;, &lt;em&gt;SEM_UNDO&lt;/em&gt;, INT32 &lt;strong&gt;semid&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;semctl&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;ERRNO &lt;strong&gt;res&lt;/strong&gt;, INT32 &lt;strong&gt;semid&lt;/strong&gt;, INT32 &lt;strong&gt;semnum&lt;/strong&gt;, FLAGS16 &lt;strong&gt;cmd&lt;/strong&gt;: &lt;em&gt;IPC_STAT&lt;/em&gt;, &lt;em&gt;IPC_SET&lt;/em&gt;, &lt;em&gt;IPC_RMID&lt;/em&gt;, &lt;em&gt;IPC_INFO&lt;/em&gt;, &lt;em&gt;SEM_INFO&lt;/em&gt;, &lt;em&gt;SEM_STAT&lt;/em&gt;, &lt;em&gt;GETALL&lt;/em&gt;, &lt;em&gt;GETNCNT&lt;/em&gt;, &lt;em&gt;GETPID&lt;/em&gt;, &lt;em&gt;GETVAL&lt;/em&gt;, &lt;em&gt;GETZCNT&lt;/em&gt;, &lt;em&gt;SETALL&lt;/em&gt;, &lt;em&gt;SETVAL&lt;/em&gt;, INT32 &lt;strong&gt;val&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;ppoll&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;ERRNO &lt;strong&gt;res&lt;/strong&gt;, FDLIST &lt;strong&gt;fds&lt;/strong&gt;, RELTIME &lt;strong&gt;timeout&lt;/strong&gt;, SIGSET &lt;strong&gt;sigmask&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;mount&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;ERRNO &lt;strong&gt;res&lt;/strong&gt;, CHARBUF &lt;strong&gt;dev&lt;/strong&gt;, FSPATH &lt;strong&gt;dir&lt;/strong&gt;, CHARBUF &lt;strong&gt;type&lt;/strong&gt;, FLAGS32 &lt;strong&gt;flags&lt;/strong&gt;: &lt;em&gt;RDONLY&lt;/em&gt;, &lt;em&gt;NOSUID&lt;/em&gt;, &lt;em&gt;NODEV&lt;/em&gt;, &lt;em&gt;NOEXEC&lt;/em&gt;, &lt;em&gt;SYNCHRONOUS&lt;/em&gt;, &lt;em&gt;REMOUNT&lt;/em&gt;, &lt;em&gt;MANDLOCK&lt;/em&gt;, &lt;em&gt;DIRSYNC&lt;/em&gt;, &lt;em&gt;NOATIME&lt;/em&gt;, &lt;em&gt;NODIRATIME&lt;/em&gt;, &lt;em&gt;BIND&lt;/em&gt;, &lt;em&gt;MOVE&lt;/em&gt;, &lt;em&gt;REC&lt;/em&gt;, &lt;em&gt;SILENT&lt;/em&gt;, &lt;em&gt;POSIXACL&lt;/em&gt;, &lt;em&gt;UNBINDABLE&lt;/em&gt;, &lt;em&gt;PRIVATE&lt;/em&gt;, &lt;em&gt;SLAVE&lt;/em&gt;, &lt;em&gt;SHARED&lt;/em&gt;, &lt;em&gt;RELATIME&lt;/em&gt;, &lt;em&gt;KERNMOUNT&lt;/em&gt;, &lt;em&gt;I_VERSION&lt;/em&gt;, &lt;em&gt;STRICTATIME&lt;/em&gt;, &lt;em&gt;LAZYTIME&lt;/em&gt;, &lt;em&gt;NOSEC&lt;/em&gt;, &lt;em&gt;BORN&lt;/em&gt;, &lt;em&gt;ACTIVE&lt;/em&gt;, &lt;em&gt;NOUSER&lt;/em&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;semget&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;ERRNO &lt;strong&gt;res&lt;/strong&gt;, INT32 &lt;strong&gt;key&lt;/strong&gt;, INT32 &lt;strong&gt;nsems&lt;/strong&gt;, FLAGS32 &lt;strong&gt;semflg&lt;/strong&gt;: &lt;em&gt;IPC_EXCL&lt;/em&gt;, &lt;em&gt;IPC_CREAT&lt;/em&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;access&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;ERRNO &lt;strong&gt;res&lt;/strong&gt;, FSPATH &lt;strong&gt;name&lt;/strong&gt;, FLAGS32 &lt;strong&gt;mode&lt;/strong&gt;: &lt;em&gt;F_OK&lt;/em&gt;, &lt;em&gt;R_OK&lt;/em&gt;, &lt;em&gt;W_OK&lt;/em&gt;, &lt;em&gt;X_OK&lt;/em&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;chroot&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;ERRNO &lt;strong&gt;res&lt;/strong&gt;, FSPATH &lt;strong&gt;path&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;setsid&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;PID &lt;strong&gt;res&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;mkdir&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;ERRNO &lt;strong&gt;res&lt;/strong&gt;, FSPATH &lt;strong&gt;path&lt;/strong&gt;, UINT32 &lt;strong&gt;mode&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;rmdir&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;ERRNO &lt;strong&gt;res&lt;/strong&gt;, FSPATH &lt;strong&gt;path&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;unshare&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;ERRNO &lt;strong&gt;res&lt;/strong&gt;, FLAGS32 &lt;strong&gt;flags&lt;/strong&gt;: &lt;em&gt;CLONE_FILES&lt;/em&gt;, &lt;em&gt;CLONE_FS&lt;/em&gt;, &lt;em&gt;CLONE_IO&lt;/em&gt;, &lt;em&gt;CLONE_NEWIPC&lt;/em&gt;, &lt;em&gt;CLONE_NEWNET&lt;/em&gt;, &lt;em&gt;CLONE_NEWNS&lt;/em&gt;, &lt;em&gt;CLONE_NEWPID&lt;/em&gt;, &lt;em&gt;CLONE_NEWUTS&lt;/em&gt;, &lt;em&gt;CLONE_PARENT&lt;/em&gt;, &lt;em&gt;CLONE_PARENT_SETTID&lt;/em&gt;, &lt;em&gt;CLONE_PTRACE&lt;/em&gt;, &lt;em&gt;CLONE_SIGHAND&lt;/em&gt;, &lt;em&gt;CLONE_SYSVSEM&lt;/em&gt;, &lt;em&gt;CLONE_THREAD&lt;/em&gt;, &lt;em&gt;CLONE_UNTRACED&lt;/em&gt;, &lt;em&gt;CLONE_VM&lt;/em&gt;, &lt;em&gt;CLONE_INVERTED&lt;/em&gt;, &lt;em&gt;NAME_CHANGED&lt;/em&gt;, &lt;em&gt;CLOSED&lt;/em&gt;, &lt;em&gt;CLONE_NEWUSER&lt;/em&gt;, &lt;em&gt;CLONE_CHILD_CLEARTID&lt;/em&gt;, &lt;em&gt;CLONE_CHILD_SETTID&lt;/em&gt;, &lt;em&gt;CLONE_SETTLS&lt;/em&gt;, &lt;em&gt;CLONE_STOPPED&lt;/em&gt;, &lt;em&gt;CLONE_VFORK&lt;/em&gt;, &lt;em&gt;CLONE_NEWCGROUP&lt;/em&gt;, &lt;em&gt;CLONE_CHILD_IN_PIDNS&lt;/em&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;execve&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;ERRNO &lt;strong&gt;res&lt;/strong&gt;, CHARBUF &lt;strong&gt;exe&lt;/strong&gt;, BYTEBUF &lt;strong&gt;args&lt;/strong&gt;, PID &lt;strong&gt;tid&lt;/strong&gt;, PID &lt;strong&gt;pid&lt;/strong&gt;, PID &lt;strong&gt;ptid&lt;/strong&gt;, CHARBUF &lt;strong&gt;cwd&lt;/strong&gt;, UINT64 &lt;strong&gt;fdlimit&lt;/strong&gt;, UINT64 &lt;strong&gt;pgft_maj&lt;/strong&gt;, UINT64 &lt;strong&gt;pgft_min&lt;/strong&gt;, UINT32 &lt;strong&gt;vm_size&lt;/strong&gt;, UINT32 &lt;strong&gt;vm_rss&lt;/strong&gt;, UINT32 &lt;strong&gt;vm_swap&lt;/strong&gt;, CHARBUF &lt;strong&gt;comm&lt;/strong&gt;, BYTEBUF &lt;strong&gt;cgroups&lt;/strong&gt;, BYTEBUF &lt;strong&gt;env&lt;/strong&gt;, UINT32 &lt;strong&gt;tty&lt;/strong&gt;, PID &lt;strong&gt;vpgid&lt;/strong&gt;, UID &lt;strong&gt;loginuid&lt;/strong&gt;, FLAGS32 &lt;strong&gt;flags&lt;/strong&gt;: &lt;em&gt;EXE_WRITABLE&lt;/em&gt;, &lt;em&gt;EXE_UPPER_LAYER&lt;/em&gt;, &lt;em&gt;EXE_FROM_MEMFD&lt;/em&gt;, &lt;em&gt;EXE_LOWER_LAYER&lt;/em&gt;, UINT64 &lt;strong&gt;cap_inheritable&lt;/strong&gt;, UINT64 &lt;strong&gt;cap_permitted&lt;/strong&gt;, UINT64 &lt;strong&gt;cap_effective&lt;/strong&gt;, UINT64 &lt;strong&gt;exe_ino&lt;/strong&gt;, ABSTIME &lt;strong&gt;exe_ino_ctime&lt;/strong&gt;, ABSTIME &lt;strong&gt;exe_ino_mtime&lt;/strong&gt;, UID &lt;strong&gt;uid&lt;/strong&gt;, FSPATH &lt;strong&gt;trusted_exepath&lt;/strong&gt;, PID &lt;strong&gt;pgid&lt;/strong&gt;, GID &lt;strong&gt;gid&lt;/strong&gt;, FSPATH &lt;strong&gt;filename&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;setpgid&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;ERRNO &lt;strong&gt;res&lt;/strong&gt;, PID &lt;strong&gt;pid&lt;/strong&gt;, PID &lt;strong&gt;pgid&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;seccomp&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;ERRNO &lt;strong&gt;res&lt;/strong&gt;, UINT64 &lt;strong&gt;op&lt;/strong&gt;, UINT64 &lt;strong&gt;flags&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;unlink&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;ERRNO &lt;strong&gt;res&lt;/strong&gt;, FSPATH &lt;strong&gt;path&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;unlinkat&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;ERRNO &lt;strong&gt;res&lt;/strong&gt;, FD &lt;strong&gt;dirfd&lt;/strong&gt;, FSRELPATH &lt;strong&gt;name&lt;/strong&gt;, FLAGS32 &lt;strong&gt;flags&lt;/strong&gt;: &lt;em&gt;AT_REMOVEDIR&lt;/em&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;mkdirat&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;ERRNO &lt;strong&gt;res&lt;/strong&gt;, FD &lt;strong&gt;dirfd&lt;/strong&gt;, FSRELPATH &lt;strong&gt;path&lt;/strong&gt;, UINT32 &lt;strong&gt;mode&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;openat&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;FD &lt;strong&gt;dirfd&lt;/strong&gt;, FSRELPATH &lt;strong&gt;name&lt;/strong&gt;, FLAGS32 &lt;strong&gt;flags&lt;/strong&gt;: &lt;em&gt;O_LARGEFILE&lt;/em&gt;, &lt;em&gt;O_DIRECTORY&lt;/em&gt;, &lt;em&gt;O_DIRECT&lt;/em&gt;, &lt;em&gt;O_TRUNC&lt;/em&gt;, &lt;em&gt;O_SYNC&lt;/em&gt;, &lt;em&gt;O_NONBLOCK&lt;/em&gt;, &lt;em&gt;O_EXCL&lt;/em&gt;, &lt;em&gt;O_DSYNC&lt;/em&gt;, &lt;em&gt;O_APPEND&lt;/em&gt;, &lt;em&gt;O_CREAT&lt;/em&gt;, &lt;em&gt;O_RDWR&lt;/em&gt;, &lt;em&gt;O_WRONLY&lt;/em&gt;, &lt;em&gt;O_RDONLY&lt;/em&gt;, &lt;em&gt;O_CLOEXEC&lt;/em&gt;, &lt;em&gt;O_NONE&lt;/em&gt;, &lt;em&gt;O_TMPFILE&lt;/em&gt;, &lt;em&gt;O_F_CREATED&lt;/em&gt;, &lt;em&gt;FD_UPPER_LAYER&lt;/em&gt;, &lt;em&gt;FD_LOWER_LAYER&lt;/em&gt;, UINT32 &lt;strong&gt;mode&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;openat&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;FD &lt;strong&gt;fd&lt;/strong&gt;, FD &lt;strong&gt;dirfd&lt;/strong&gt;, FSRELPATH &lt;strong&gt;name&lt;/strong&gt;, FLAGS32 &lt;strong&gt;flags&lt;/strong&gt;: &lt;em&gt;O_LARGEFILE&lt;/em&gt;, &lt;em&gt;O_DIRECTORY&lt;/em&gt;, &lt;em&gt;O_DIRECT&lt;/em&gt;, &lt;em&gt;O_TRUNC&lt;/em&gt;, &lt;em&gt;O_SYNC&lt;/em&gt;, &lt;em&gt;O_NONBLOCK&lt;/em&gt;, &lt;em&gt;O_EXCL&lt;/em&gt;, &lt;em&gt;O_DSYNC&lt;/em&gt;, &lt;em&gt;O_APPEND&lt;/em&gt;, &lt;em&gt;O_CREAT&lt;/em&gt;, &lt;em&gt;O_RDWR&lt;/em&gt;, &lt;em&gt;O_WRONLY&lt;/em&gt;, &lt;em&gt;O_RDONLY&lt;/em&gt;, &lt;em&gt;O_CLOEXEC&lt;/em&gt;, &lt;em&gt;O_NONE&lt;/em&gt;, &lt;em&gt;O_TMPFILE&lt;/em&gt;, &lt;em&gt;O_F_CREATED&lt;/em&gt;, &lt;em&gt;FD_UPPER_LAYER&lt;/em&gt;, &lt;em&gt;FD_LOWER_LAYER&lt;/em&gt;, UINT32 &lt;strong&gt;mode&lt;/strong&gt;, UINT32 &lt;strong&gt;dev&lt;/strong&gt;, UINT64 &lt;strong&gt;ino&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;link&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;ERRNO &lt;strong&gt;res&lt;/strong&gt;, FSPATH &lt;strong&gt;oldpath&lt;/strong&gt;, FSPATH &lt;strong&gt;newpath&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;linkat&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;ERRNO &lt;strong&gt;res&lt;/strong&gt;, FD &lt;strong&gt;olddir&lt;/strong&gt;, FSRELPATH &lt;strong&gt;oldpath&lt;/strong&gt;, FD &lt;strong&gt;newdir&lt;/strong&gt;, FSRELPATH &lt;strong&gt;newpath&lt;/strong&gt;, FLAGS32 &lt;strong&gt;flags&lt;/strong&gt;: &lt;em&gt;AT_SYMLINK_FOLLOW&lt;/em&gt;, &lt;em&gt;AT_EMPTY_PATH&lt;/em&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;fchmodat&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;ERRNO &lt;strong&gt;res&lt;/strong&gt;, FD &lt;strong&gt;dirfd&lt;/strong&gt;, FSRELPATH &lt;strong&gt;filename&lt;/strong&gt;, MODE &lt;strong&gt;mode&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;chmod&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;ERRNO &lt;strong&gt;res&lt;/strong&gt;, FSPATH &lt;strong&gt;filename&lt;/strong&gt;, MODE &lt;strong&gt;mode&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;fchmod&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;ERRNO &lt;strong&gt;res&lt;/strong&gt;, FD &lt;strong&gt;fd&lt;/strong&gt;, MODE &lt;strong&gt;mode&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;renameat2&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;ERRNO &lt;strong&gt;res&lt;/strong&gt;, FD &lt;strong&gt;olddirfd&lt;/strong&gt;, FSRELPATH &lt;strong&gt;oldpath&lt;/strong&gt;, FD &lt;strong&gt;newdirfd&lt;/strong&gt;, FSRELPATH &lt;strong&gt;newpath&lt;/strong&gt;, FLAGS32 &lt;strong&gt;flags&lt;/strong&gt;: &lt;em&gt;RENAME_NOREPLACE&lt;/em&gt;, &lt;em&gt;RENAME_EXCHANGE&lt;/em&gt;, &lt;em&gt;RENAME_WHITEOUT&lt;/em&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;userfaultfd&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;ERRNO &lt;strong&gt;res&lt;/strong&gt;, FLAGS32 &lt;strong&gt;flags&lt;/strong&gt;: &lt;em&gt;O_LARGEFILE&lt;/em&gt;, &lt;em&gt;O_DIRECTORY&lt;/em&gt;, &lt;em&gt;O_DIRECT&lt;/em&gt;, &lt;em&gt;O_TRUNC&lt;/em&gt;, &lt;em&gt;O_SYNC&lt;/em&gt;, &lt;em&gt;O_NONBLOCK&lt;/em&gt;, &lt;em&gt;O_EXCL&lt;/em&gt;, &lt;em&gt;O_DSYNC&lt;/em&gt;, &lt;em&gt;O_APPEND&lt;/em&gt;, &lt;em&gt;O_CREAT&lt;/em&gt;, &lt;em&gt;O_RDWR&lt;/em&gt;, &lt;em&gt;O_WRONLY&lt;/em&gt;, &lt;em&gt;O_RDONLY&lt;/em&gt;, &lt;em&gt;O_CLOEXEC&lt;/em&gt;, &lt;em&gt;O_NONE&lt;/em&gt;, &lt;em&gt;O_TMPFILE&lt;/em&gt;, &lt;em&gt;O_F_CREATED&lt;/em&gt;, &lt;em&gt;FD_UPPER_LAYER&lt;/em&gt;, &lt;em&gt;FD_LOWER_LAYER&lt;/em&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;openat2&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;FD &lt;strong&gt;dirfd&lt;/strong&gt;, FSRELPATH &lt;strong&gt;name&lt;/strong&gt;, FLAGS32 &lt;strong&gt;flags&lt;/strong&gt;: &lt;em&gt;O_LARGEFILE&lt;/em&gt;, &lt;em&gt;O_DIRECTORY&lt;/em&gt;, &lt;em&gt;O_DIRECT&lt;/em&gt;, &lt;em&gt;O_TRUNC&lt;/em&gt;, &lt;em&gt;O_SYNC&lt;/em&gt;, &lt;em&gt;O_NONBLOCK&lt;/em&gt;, &lt;em&gt;O_EXCL&lt;/em&gt;, &lt;em&gt;O_DSYNC&lt;/em&gt;, &lt;em&gt;O_APPEND&lt;/em&gt;, &lt;em&gt;O_CREAT&lt;/em&gt;, &lt;em&gt;O_RDWR&lt;/em&gt;, &lt;em&gt;O_WRONLY&lt;/em&gt;, &lt;em&gt;O_RDONLY&lt;/em&gt;, &lt;em&gt;O_CLOEXEC&lt;/em&gt;, &lt;em&gt;O_NONE&lt;/em&gt;, &lt;em&gt;O_TMPFILE&lt;/em&gt;, &lt;em&gt;O_F_CREATED&lt;/em&gt;, &lt;em&gt;FD_UPPER_LAYER&lt;/em&gt;, &lt;em&gt;FD_LOWER_LAYER&lt;/em&gt;, UINT32 &lt;strong&gt;mode&lt;/strong&gt;, FLAGS32 &lt;strong&gt;resolve&lt;/strong&gt;: &lt;em&gt;RESOLVE_BENEATH&lt;/em&gt;, &lt;em&gt;RESOLVE_IN_ROOT&lt;/em&gt;, &lt;em&gt;RESOLVE_NO_MAGICLINKS&lt;/em&gt;, &lt;em&gt;RESOLVE_NO_SYMLINKS&lt;/em&gt;, &lt;em&gt;RESOLVE_NO_XDEV&lt;/em&gt;, &lt;em&gt;RESOLVE_CACHED&lt;/em&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;openat2&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;FD &lt;strong&gt;fd&lt;/strong&gt;, FD &lt;strong&gt;dirfd&lt;/strong&gt;, FSRELPATH &lt;strong&gt;name&lt;/strong&gt;, FLAGS32 &lt;strong&gt;flags&lt;/strong&gt;: &lt;em&gt;O_LARGEFILE&lt;/em&gt;, &lt;em&gt;O_DIRECTORY&lt;/em&gt;, &lt;em&gt;O_DIRECT&lt;/em&gt;, &lt;em&gt;O_TRUNC&lt;/em&gt;, &lt;em&gt;O_SYNC&lt;/em&gt;, &lt;em&gt;O_NONBLOCK&lt;/em&gt;, &lt;em&gt;O_EXCL&lt;/em&gt;, &lt;em&gt;O_DSYNC&lt;/em&gt;, &lt;em&gt;O_APPEND&lt;/em&gt;, &lt;em&gt;O_CREAT&lt;/em&gt;, &lt;em&gt;O_RDWR&lt;/em&gt;, &lt;em&gt;O_WRONLY&lt;/em&gt;, &lt;em&gt;O_RDONLY&lt;/em&gt;, &lt;em&gt;O_CLOEXEC&lt;/em&gt;, &lt;em&gt;O_NONE&lt;/em&gt;, &lt;em&gt;O_TMPFILE&lt;/em&gt;, &lt;em&gt;O_F_CREATED&lt;/em&gt;, &lt;em&gt;FD_UPPER_LAYER&lt;/em&gt;, &lt;em&gt;FD_LOWER_LAYER&lt;/em&gt;, UINT32 &lt;strong&gt;mode&lt;/strong&gt;, FLAGS32 &lt;strong&gt;resolve&lt;/strong&gt;: &lt;em&gt;RESOLVE_BENEATH&lt;/em&gt;, &lt;em&gt;RESOLVE_IN_ROOT&lt;/em&gt;, &lt;em&gt;RESOLVE_NO_MAGICLINKS&lt;/em&gt;, &lt;em&gt;RESOLVE_NO_SYMLINKS&lt;/em&gt;, &lt;em&gt;RESOLVE_NO_XDEV&lt;/em&gt;, &lt;em&gt;RESOLVE_CACHED&lt;/em&gt;, UINT32 &lt;strong&gt;dev&lt;/strong&gt;, UINT64 &lt;strong&gt;ino&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;mprotect&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;ERRNO &lt;strong&gt;res&lt;/strong&gt;, UINT64 &lt;strong&gt;addr&lt;/strong&gt;, UINT64 &lt;strong&gt;length&lt;/strong&gt;, FLAGS32 &lt;strong&gt;prot&lt;/strong&gt;: &lt;em&gt;PROT_READ&lt;/em&gt;, &lt;em&gt;PROT_WRITE&lt;/em&gt;, &lt;em&gt;PROT_EXEC&lt;/em&gt;, &lt;em&gt;PROT_SEM&lt;/em&gt;, &lt;em&gt;PROT_GROWSDOWN&lt;/em&gt;, &lt;em&gt;PROT_GROWSUP&lt;/em&gt;, &lt;em&gt;PROT_SAO&lt;/em&gt;, &lt;em&gt;PROT_NONE&lt;/em&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;execveat&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;ERRNO &lt;strong&gt;res&lt;/strong&gt;, CHARBUF &lt;strong&gt;exe&lt;/strong&gt;, BYTEBUF &lt;strong&gt;args&lt;/strong&gt;, PID &lt;strong&gt;tid&lt;/strong&gt;, PID &lt;strong&gt;pid&lt;/strong&gt;, PID &lt;strong&gt;ptid&lt;/strong&gt;, CHARBUF &lt;strong&gt;cwd&lt;/strong&gt;, UINT64 &lt;strong&gt;fdlimit&lt;/strong&gt;, UINT64 &lt;strong&gt;pgft_maj&lt;/strong&gt;, UINT64 &lt;strong&gt;pgft_min&lt;/strong&gt;, UINT32 &lt;strong&gt;vm_size&lt;/strong&gt;, UINT32 &lt;strong&gt;vm_rss&lt;/strong&gt;, UINT32 &lt;strong&gt;vm_swap&lt;/strong&gt;, CHARBUF &lt;strong&gt;comm&lt;/strong&gt;, BYTEBUF &lt;strong&gt;cgroups&lt;/strong&gt;, BYTEBUF &lt;strong&gt;env&lt;/strong&gt;, UINT32 &lt;strong&gt;tty&lt;/strong&gt;, PID &lt;strong&gt;vpgid&lt;/strong&gt;, UID &lt;strong&gt;loginuid&lt;/strong&gt;, FLAGS32 &lt;strong&gt;flags&lt;/strong&gt;: &lt;em&gt;EXE_WRITABLE&lt;/em&gt;, &lt;em&gt;EXE_UPPER_LAYER&lt;/em&gt;, &lt;em&gt;EXE_FROM_MEMFD&lt;/em&gt;, &lt;em&gt;EXE_LOWER_LAYER&lt;/em&gt;, UINT64 &lt;strong&gt;cap_inheritable&lt;/strong&gt;, UINT64 &lt;strong&gt;cap_permitted&lt;/strong&gt;, UINT64 &lt;strong&gt;cap_effective&lt;/strong&gt;, UINT64 &lt;strong&gt;exe_ino&lt;/strong&gt;, ABSTIME &lt;strong&gt;exe_ino_ctime&lt;/strong&gt;, ABSTIME &lt;strong&gt;exe_ino_mtime&lt;/strong&gt;, UID &lt;strong&gt;uid&lt;/strong&gt;, FSPATH &lt;strong&gt;trusted_exepath&lt;/strong&gt;, PID &lt;strong&gt;pgid&lt;/strong&gt;, GID &lt;strong&gt;gid&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;copy_file_range&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;ERRNO &lt;strong&gt;res&lt;/strong&gt;, FD &lt;strong&gt;fdout&lt;/strong&gt;, UINT64 &lt;strong&gt;offout&lt;/strong&gt;, FD &lt;strong&gt;fdin&lt;/strong&gt;, UINT64 &lt;strong&gt;offin&lt;/strong&gt;, UINT64 &lt;strong&gt;len&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;clone3&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;PID &lt;strong&gt;res&lt;/strong&gt;, CHARBUF &lt;strong&gt;exe&lt;/strong&gt;, BYTEBUF &lt;strong&gt;args&lt;/strong&gt;, PID &lt;strong&gt;tid&lt;/strong&gt;, PID &lt;strong&gt;pid&lt;/strong&gt;, PID &lt;strong&gt;ptid&lt;/strong&gt;, CHARBUF &lt;strong&gt;cwd&lt;/strong&gt;, INT64 &lt;strong&gt;fdlimit&lt;/strong&gt;, UINT64 &lt;strong&gt;pgft_maj&lt;/strong&gt;, UINT64 &lt;strong&gt;pgft_min&lt;/strong&gt;, UINT32 &lt;strong&gt;vm_size&lt;/strong&gt;, UINT32 &lt;strong&gt;vm_rss&lt;/strong&gt;, UINT32 &lt;strong&gt;vm_swap&lt;/strong&gt;, CHARBUF &lt;strong&gt;comm&lt;/strong&gt;, BYTEBUF &lt;strong&gt;cgroups&lt;/strong&gt;, FLAGS32 &lt;strong&gt;flags&lt;/strong&gt;: &lt;em&gt;CLONE_FILES&lt;/em&gt;, &lt;em&gt;CLONE_FS&lt;/em&gt;, &lt;em&gt;CLONE_IO&lt;/em&gt;, &lt;em&gt;CLONE_NEWIPC&lt;/em&gt;, &lt;em&gt;CLONE_NEWNET&lt;/em&gt;, &lt;em&gt;CLONE_NEWNS&lt;/em&gt;, &lt;em&gt;CLONE_NEWPID&lt;/em&gt;, &lt;em&gt;CLONE_NEWUTS&lt;/em&gt;, &lt;em&gt;CLONE_PARENT&lt;/em&gt;, &lt;em&gt;CLONE_PARENT_SETTID&lt;/em&gt;, &lt;em&gt;CLONE_PTRACE&lt;/em&gt;, &lt;em&gt;CLONE_SIGHAND&lt;/em&gt;, &lt;em&gt;CLONE_SYSVSEM&lt;/em&gt;, &lt;em&gt;CLONE_THREAD&lt;/em&gt;, &lt;em&gt;CLONE_UNTRACED&lt;/em&gt;, &lt;em&gt;CLONE_VM&lt;/em&gt;, &lt;em&gt;CLONE_INVERTED&lt;/em&gt;, &lt;em&gt;NAME_CHANGED&lt;/em&gt;, &lt;em&gt;CLOSED&lt;/em&gt;, &lt;em&gt;CLONE_NEWUSER&lt;/em&gt;, &lt;em&gt;CLONE_CHILD_CLEARTID&lt;/em&gt;, &lt;em&gt;CLONE_CHILD_SETTID&lt;/em&gt;, &lt;em&gt;CLONE_SETTLS&lt;/em&gt;, &lt;em&gt;CLONE_STOPPED&lt;/em&gt;, &lt;em&gt;CLONE_VFORK&lt;/em&gt;, &lt;em&gt;CLONE_NEWCGROUP&lt;/em&gt;, &lt;em&gt;CLONE_CHILD_IN_PIDNS&lt;/em&gt;, UINT32 &lt;strong&gt;uid&lt;/strong&gt;, UINT32 &lt;strong&gt;gid&lt;/strong&gt;, PID &lt;strong&gt;vtid&lt;/strong&gt;, PID &lt;strong&gt;vpid&lt;/strong&gt;, UINT64 &lt;strong&gt;pidns_init_start_ts&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;open_by_handle_at&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;FD &lt;strong&gt;fd&lt;/strong&gt;, FD &lt;strong&gt;mountfd&lt;/strong&gt;, FLAGS32 &lt;strong&gt;flags&lt;/strong&gt;: &lt;em&gt;O_LARGEFILE&lt;/em&gt;, &lt;em&gt;O_DIRECTORY&lt;/em&gt;, &lt;em&gt;O_DIRECT&lt;/em&gt;, &lt;em&gt;O_TRUNC&lt;/em&gt;, &lt;em&gt;O_SYNC&lt;/em&gt;, &lt;em&gt;O_NONBLOCK&lt;/em&gt;, &lt;em&gt;O_EXCL&lt;/em&gt;, &lt;em&gt;O_DSYNC&lt;/em&gt;, &lt;em&gt;O_APPEND&lt;/em&gt;, &lt;em&gt;O_CREAT&lt;/em&gt;, &lt;em&gt;O_RDWR&lt;/em&gt;, &lt;em&gt;O_WRONLY&lt;/em&gt;, &lt;em&gt;O_RDONLY&lt;/em&gt;, &lt;em&gt;O_CLOEXEC&lt;/em&gt;, &lt;em&gt;O_NONE&lt;/em&gt;, &lt;em&gt;O_TMPFILE&lt;/em&gt;, &lt;em&gt;O_F_CREATED&lt;/em&gt;, &lt;em&gt;FD_UPPER_LAYER&lt;/em&gt;, &lt;em&gt;FD_LOWER_LAYER&lt;/em&gt;, FSPATH &lt;strong&gt;path&lt;/strong&gt;, UINT32 &lt;strong&gt;dev&lt;/strong&gt;, UINT64 &lt;strong&gt;ino&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;io_uring_setup&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;ERRNO &lt;strong&gt;res&lt;/strong&gt;, UINT32 &lt;strong&gt;entries&lt;/strong&gt;, UINT32 &lt;strong&gt;sq_entries&lt;/strong&gt;, UINT32 &lt;strong&gt;cq_entries&lt;/strong&gt;, FLAGS32 &lt;strong&gt;flags&lt;/strong&gt;: &lt;em&gt;IORING_SETUP_IOPOLL&lt;/em&gt;, &lt;em&gt;IORING_SETUP_SQPOLL&lt;/em&gt;, &lt;em&gt;IORING_SQ_NEED_WAKEUP&lt;/em&gt;, &lt;em&gt;IORING_SETUP_SQ_AFF&lt;/em&gt;, &lt;em&gt;IORING_SETUP_CQSIZE&lt;/em&gt;, &lt;em&gt;IORING_SETUP_CLAMP&lt;/em&gt;, &lt;em&gt;IORING_SETUP_ATTACH_RW&lt;/em&gt;, &lt;em&gt;IORING_SETUP_R_DISABLED&lt;/em&gt;, UINT32 &lt;strong&gt;sq_thread_cpu&lt;/strong&gt;, UINT32 &lt;strong&gt;sq_thread_idle&lt;/strong&gt;, FLAGS32 &lt;strong&gt;features&lt;/strong&gt;: &lt;em&gt;IORING_FEAT_SINGLE_MMAP&lt;/em&gt;, &lt;em&gt;IORING_FEAT_NODROP&lt;/em&gt;, &lt;em&gt;IORING_FEAT_SUBMIT_STABLE&lt;/em&gt;, &lt;em&gt;IORING_FEAT_RW_CUR_POS&lt;/em&gt;, &lt;em&gt;IORING_FEAT_CUR_PERSONALITY&lt;/em&gt;, &lt;em&gt;IORING_FEAT_FAST_POLL&lt;/em&gt;, &lt;em&gt;IORING_FEAT_POLL_32BITS&lt;/em&gt;, &lt;em&gt;IORING_FEAT_SQPOLL_NONFIXED&lt;/em&gt;, &lt;em&gt;IORING_FEAT_ENTER_EXT_ARG&lt;/em&gt;, &lt;em&gt;IORING_FEAT_NATIVE_WORKERS&lt;/em&gt;, &lt;em&gt;IORING_FEAT_RSRC_TAGS&lt;/em&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;io_uring_enter&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;ERRNO &lt;strong&gt;res&lt;/strong&gt;, FD &lt;strong&gt;fd&lt;/strong&gt;, UINT32 &lt;strong&gt;to_submit&lt;/strong&gt;, UINT32 &lt;strong&gt;min_complete&lt;/strong&gt;, FLAGS32 &lt;strong&gt;flags&lt;/strong&gt;: &lt;em&gt;IORING_ENTER_GETEVENTS&lt;/em&gt;, &lt;em&gt;IORING_ENTER_SQ_WAKEUP&lt;/em&gt;, &lt;em&gt;IORING_ENTER_SQ_WAIT&lt;/em&gt;, &lt;em&gt;IORING_ENTER_EXT_ARG&lt;/em&gt;, SIGSET &lt;strong&gt;sig&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;io_uring_register&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;ERRNO &lt;strong&gt;res&lt;/strong&gt;, FD &lt;strong&gt;fd&lt;/strong&gt;, ENUMFLAGS16 &lt;strong&gt;opcode&lt;/strong&gt;: &lt;em&gt;IORING_REGISTER_BUFFERS&lt;/em&gt;, &lt;em&gt;IORING_UNREGISTER_BUFFERS&lt;/em&gt;, &lt;em&gt;IORING_REGISTER_FILES&lt;/em&gt;, &lt;em&gt;IORING_UNREGISTER_FILES&lt;/em&gt;, &lt;em&gt;IORING_REGISTER_EVENTFD&lt;/em&gt;, &lt;em&gt;IORING_UNREGISTER_EVENTFD&lt;/em&gt;, &lt;em&gt;IORING_REGISTER_FILES_UPDATE&lt;/em&gt;, &lt;em&gt;IORING_REGISTER_EVENTFD_ASYNC&lt;/em&gt;, &lt;em&gt;IORING_REGISTER_PROBE&lt;/em&gt;, &lt;em&gt;IORING_REGISTER_PERSONALITY&lt;/em&gt;, &lt;em&gt;IORING_UNREGISTER_PERSONALITY&lt;/em&gt;, &lt;em&gt;IORING_REGISTER_RESTRICTIONS&lt;/em&gt;, &lt;em&gt;IORING_REGISTER_ENABLE_RINGS&lt;/em&gt;, &lt;em&gt;IORING_REGISTER_FILES2&lt;/em&gt;, &lt;em&gt;IORING_REGISTER_FILES_UPDATE2&lt;/em&gt;, &lt;em&gt;IORING_REGISTER_BUFFERS2&lt;/em&gt;, &lt;em&gt;IORING_REGISTER_BUFFERS_UPDATE&lt;/em&gt;, &lt;em&gt;IORING_REGISTER_IOWQ_AFF&lt;/em&gt;, &lt;em&gt;IORING_UNREGISTER_IOWQ_AFF&lt;/em&gt;, &lt;em&gt;IORING_REGISTER_IOWQ_MAX_WORKERS&lt;/em&gt;, &lt;em&gt;IORING_REGISTER_RING_FDS&lt;/em&gt;, &lt;em&gt;IORING_UNREGISTER_RING_FDS&lt;/em&gt;, UINT64 &lt;strong&gt;arg&lt;/strong&gt;, UINT32 &lt;strong&gt;nr_args&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;mlock&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;ERRNO &lt;strong&gt;res&lt;/strong&gt;, UINT64 &lt;strong&gt;addr&lt;/strong&gt;, UINT64 &lt;strong&gt;len&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;munlock&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;ERRNO &lt;strong&gt;res&lt;/strong&gt;, UINT64 &lt;strong&gt;addr&lt;/strong&gt;, UINT64 &lt;strong&gt;len&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;mlockall&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;ERRNO &lt;strong&gt;res&lt;/strong&gt;, FLAGS32 &lt;strong&gt;flags&lt;/strong&gt;: &lt;em&gt;MCL_CURRENT&lt;/em&gt;, &lt;em&gt;MCL_FUTURE&lt;/em&gt;, &lt;em&gt;MCL_ONFAULT&lt;/em&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;munlockall&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;ERRNO &lt;strong&gt;res&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;capset&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;ERRNO &lt;strong&gt;res&lt;/strong&gt;, UINT64 &lt;strong&gt;cap_inheritable&lt;/strong&gt;, UINT64 &lt;strong&gt;cap_permitted&lt;/strong&gt;, UINT64 &lt;strong&gt;cap_effective&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;dup2&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;FD &lt;strong&gt;res&lt;/strong&gt;, FD &lt;strong&gt;oldfd&lt;/strong&gt;, FD &lt;strong&gt;newfd&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;dup3&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;FD &lt;strong&gt;res&lt;/strong&gt;, FD &lt;strong&gt;oldfd&lt;/strong&gt;, FD &lt;strong&gt;newfd&lt;/strong&gt;, FLAGS32 &lt;strong&gt;flags&lt;/strong&gt;: &lt;em&gt;O_LARGEFILE&lt;/em&gt;, &lt;em&gt;O_DIRECTORY&lt;/em&gt;, &lt;em&gt;O_DIRECT&lt;/em&gt;, &lt;em&gt;O_TRUNC&lt;/em&gt;, &lt;em&gt;O_SYNC&lt;/em&gt;, &lt;em&gt;O_NONBLOCK&lt;/em&gt;, &lt;em&gt;O_EXCL&lt;/em&gt;, &lt;em&gt;O_DSYNC&lt;/em&gt;, &lt;em&gt;O_APPEND&lt;/em&gt;, &lt;em&gt;O_CREAT&lt;/em&gt;, &lt;em&gt;O_RDWR&lt;/em&gt;, &lt;em&gt;O_WRONLY&lt;/em&gt;, &lt;em&gt;O_RDONLY&lt;/em&gt;, &lt;em&gt;O_CLOEXEC&lt;/em&gt;, &lt;em&gt;O_NONE&lt;/em&gt;, &lt;em&gt;O_TMPFILE&lt;/em&gt;, &lt;em&gt;O_F_CREATED&lt;/em&gt;, &lt;em&gt;FD_UPPER_LAYER&lt;/em&gt;, &lt;em&gt;FD_LOWER_LAYER&lt;/em&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;dup&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;FD &lt;strong&gt;res&lt;/strong&gt;, FD &lt;strong&gt;oldfd&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;bpf&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;FD &lt;strong&gt;fd&lt;/strong&gt;, ENUMFLAGS32 &lt;strong&gt;cmd&lt;/strong&gt;: &lt;em&gt;BPF_MAP_CREATE&lt;/em&gt;, &lt;em&gt;BPF_MAP_LOOKUP_ELEM&lt;/em&gt;, &lt;em&gt;BPF_MAP_UPDATE_ELEM&lt;/em&gt;, &lt;em&gt;BPF_MAP_DELETE_ELEM&lt;/em&gt;, &lt;em&gt;BPF_MAP_GET_NEXT_KEY&lt;/em&gt;, &lt;em&gt;BPF_PROG_LOAD&lt;/em&gt;, &lt;em&gt;BPF_OBJ_PIN&lt;/em&gt;, &lt;em&gt;BPF_OBJ_GET&lt;/em&gt;, &lt;em&gt;BPF_PROG_ATTACH&lt;/em&gt;, &lt;em&gt;BPF_PROG_DETACH&lt;/em&gt;, &lt;em&gt;BPF_PROG_TEST_RUN&lt;/em&gt;, &lt;em&gt;BPF_PROG_RUN&lt;/em&gt;, &lt;em&gt;BPF_PROG_GET_NEXT_ID&lt;/em&gt;, &lt;em&gt;BPF_MAP_GET_NEXT_ID&lt;/em&gt;, &lt;em&gt;BPF_PROG_GET_FD_BY_ID&lt;/em&gt;, &lt;em&gt;BPF_MAP_GET_FD_BY_ID&lt;/em&gt;, &lt;em&gt;BPF_OBJ_GET_INFO_BY_FD&lt;/em&gt;, &lt;em&gt;BPF_PROG_QUERY&lt;/em&gt;, &lt;em&gt;BPF_RAW_TRACEPOINT_OPEN&lt;/em&gt;, &lt;em&gt;BPF_BTF_LOAD&lt;/em&gt;, &lt;em&gt;BPF_BTF_GET_FD_BY_ID&lt;/em&gt;, &lt;em&gt;BPF_TASK_FD_QUERY&lt;/em&gt;, &lt;em&gt;BPF_MAP_LOOKUP_AND_DELETE_ELEM&lt;/em&gt;, &lt;em&gt;BPF_MAP_FREEZE&lt;/em&gt;, &lt;em&gt;BPF_BTF_GET_NEXT_ID&lt;/em&gt;, &lt;em&gt;BPF_MAP_LOOKUP_BATCH&lt;/em&gt;, &lt;em&gt;BPF_MAP_LOOKUP_AND_DELETE_BATCH&lt;/em&gt;, &lt;em&gt;BPF_MAP_UPDATE_BATCH&lt;/em&gt;, &lt;em&gt;BPF_MAP_DELETE_BATCH&lt;/em&gt;, &lt;em&gt;BPF_LINK_CREATE&lt;/em&gt;, &lt;em&gt;BPF_LINK_UPDATE&lt;/em&gt;, &lt;em&gt;BPF_LINK_GET_FD_BY_ID&lt;/em&gt;, &lt;em&gt;BPF_LINK_GET_NEXT_ID&lt;/em&gt;, &lt;em&gt;BPF_ENABLE_STATS&lt;/em&gt;, &lt;em&gt;BPF_ITER_CREATE&lt;/em&gt;, &lt;em&gt;BPF_LINK_DETACH&lt;/em&gt;, &lt;em&gt;BPF_PROG_BIND_MAP&lt;/em&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;mlock2&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;ERRNO &lt;strong&gt;res&lt;/strong&gt;, UINT64 &lt;strong&gt;addr&lt;/strong&gt;, UINT64 &lt;strong&gt;len&lt;/strong&gt;, FLAGS32 &lt;strong&gt;flags&lt;/strong&gt;: &lt;em&gt;MLOCK_ONFAULT&lt;/em&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;fsconfig&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;ERRNO &lt;strong&gt;res&lt;/strong&gt;, FD &lt;strong&gt;fd&lt;/strong&gt;, ENUMFLAGS32 &lt;strong&gt;cmd&lt;/strong&gt;: &lt;em&gt;FSCONFIG_SET_FLAG&lt;/em&gt;, &lt;em&gt;FSCONFIG_SET_STRING&lt;/em&gt;, &lt;em&gt;FSCONFIG_SET_BINARY&lt;/em&gt;, &lt;em&gt;FSCONFIG_SET_PATH&lt;/em&gt;, &lt;em&gt;FSCONFIG_SET_PATH_EMPTY&lt;/em&gt;, &lt;em&gt;FSCONFIG_SET_FD&lt;/em&gt;, &lt;em&gt;FSCONFIG_CMD_CREATE&lt;/em&gt;, &lt;em&gt;FSCONFIG_CMD_RECONFIGURE&lt;/em&gt;, CHARBUF &lt;strong&gt;key&lt;/strong&gt;, BYTEBUF &lt;strong&gt;value_bytebuf&lt;/strong&gt;, CHARBUF &lt;strong&gt;value_charbuf&lt;/strong&gt;, INT32 &lt;strong&gt;aux&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;epoll_create&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;ERRNO &lt;strong&gt;res&lt;/strong&gt;, INT32 &lt;strong&gt;size&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;epoll_create1&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;ERRNO &lt;strong&gt;res&lt;/strong&gt;, FLAGS32 &lt;strong&gt;flags&lt;/strong&gt;: &lt;em&gt;EPOLL_CLOEXEC&lt;/em&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;chown&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;ERRNO &lt;strong&gt;res&lt;/strong&gt;, FSPATH &lt;strong&gt;path&lt;/strong&gt;, UINT32 &lt;strong&gt;uid&lt;/strong&gt;, UINT32 &lt;strong&gt;gid&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;lchown&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;ERRNO &lt;strong&gt;res&lt;/strong&gt;, FSPATH &lt;strong&gt;path&lt;/strong&gt;, UINT32 &lt;strong&gt;uid&lt;/strong&gt;, UINT32 &lt;strong&gt;gid&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;fchown&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;ERRNO &lt;strong&gt;res&lt;/strong&gt;, FD &lt;strong&gt;fd&lt;/strong&gt;, UINT32 &lt;strong&gt;uid&lt;/strong&gt;, UINT32 &lt;strong&gt;gid&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;fchownat&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;ERRNO &lt;strong&gt;res&lt;/strong&gt;, FD &lt;strong&gt;dirfd&lt;/strong&gt;, FSRELPATH &lt;strong&gt;pathname&lt;/strong&gt;, UINT32 &lt;strong&gt;uid&lt;/strong&gt;, UINT32 &lt;strong&gt;gid&lt;/strong&gt;, FLAGS32 &lt;strong&gt;flags&lt;/strong&gt;: &lt;em&gt;AT_SYMLINK_NOFOLLOW&lt;/em&gt;, &lt;em&gt;AT_EMPTY_PATH&lt;/em&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;umount&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;ERRNO &lt;strong&gt;res&lt;/strong&gt;, FSPATH &lt;strong&gt;name&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;accept4&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;FD &lt;strong&gt;fd&lt;/strong&gt;, SOCKTUPLE &lt;strong&gt;tuple&lt;/strong&gt;, UINT8 &lt;strong&gt;queuepct&lt;/strong&gt;, UINT32 &lt;strong&gt;queuelen&lt;/strong&gt;, UINT32 &lt;strong&gt;queuemax&lt;/strong&gt;, INT32 &lt;strong&gt;flags&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;umount2&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;ERRNO &lt;strong&gt;res&lt;/strong&gt;, FSPATH &lt;strong&gt;name&lt;/strong&gt;, FLAGS32 &lt;strong&gt;flags&lt;/strong&gt;: &lt;em&gt;FORCE&lt;/em&gt;, &lt;em&gt;DETACH&lt;/em&gt;, &lt;em&gt;EXPIRE&lt;/em&gt;, &lt;em&gt;NOFOLLOW&lt;/em&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;pipe2&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;ERRNO &lt;strong&gt;res&lt;/strong&gt;, FD &lt;strong&gt;fd1&lt;/strong&gt;, FD &lt;strong&gt;fd2&lt;/strong&gt;, UINT64 &lt;strong&gt;ino&lt;/strong&gt;, FLAGS32 &lt;strong&gt;flags&lt;/strong&gt;: &lt;em&gt;O_LARGEFILE&lt;/em&gt;, &lt;em&gt;O_DIRECTORY&lt;/em&gt;, &lt;em&gt;O_DIRECT&lt;/em&gt;, &lt;em&gt;O_TRUNC&lt;/em&gt;, &lt;em&gt;O_SYNC&lt;/em&gt;, &lt;em&gt;O_NONBLOCK&lt;/em&gt;, &lt;em&gt;O_EXCL&lt;/em&gt;, &lt;em&gt;O_DSYNC&lt;/em&gt;, &lt;em&gt;O_APPEND&lt;/em&gt;, &lt;em&gt;O_CREAT&lt;/em&gt;, &lt;em&gt;O_RDWR&lt;/em&gt;, &lt;em&gt;O_WRONLY&lt;/em&gt;, &lt;em&gt;O_RDONLY&lt;/em&gt;, &lt;em&gt;O_CLOEXEC&lt;/em&gt;, &lt;em&gt;O_NONE&lt;/em&gt;, &lt;em&gt;O_TMPFILE&lt;/em&gt;, &lt;em&gt;O_F_CREATED&lt;/em&gt;, &lt;em&gt;FD_UPPER_LAYER&lt;/em&gt;, &lt;em&gt;FD_LOWER_LAYER&lt;/em&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;inotify_init1&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;FD &lt;strong&gt;res&lt;/strong&gt;, FLAGS16 &lt;strong&gt;flags&lt;/strong&gt;: &lt;em&gt;O_LARGEFILE&lt;/em&gt;, &lt;em&gt;O_DIRECTORY&lt;/em&gt;, &lt;em&gt;O_DIRECT&lt;/em&gt;, &lt;em&gt;O_TRUNC&lt;/em&gt;, &lt;em&gt;O_SYNC&lt;/em&gt;, &lt;em&gt;O_NONBLOCK&lt;/em&gt;, &lt;em&gt;O_EXCL&lt;/em&gt;, &lt;em&gt;O_DSYNC&lt;/em&gt;, &lt;em&gt;O_APPEND&lt;/em&gt;, &lt;em&gt;O_CREAT&lt;/em&gt;, &lt;em&gt;O_RDWR&lt;/em&gt;, &lt;em&gt;O_WRONLY&lt;/em&gt;, &lt;em&gt;O_RDONLY&lt;/em&gt;, &lt;em&gt;O_CLOEXEC&lt;/em&gt;, &lt;em&gt;O_NONE&lt;/em&gt;, &lt;em&gt;O_TMPFILE&lt;/em&gt;, &lt;em&gt;O_F_CREATED&lt;/em&gt;, &lt;em&gt;FD_UPPER_LAYER&lt;/em&gt;, &lt;em&gt;FD_LOWER_LAYER&lt;/em&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;eventfd2&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;FD &lt;strong&gt;res&lt;/strong&gt;, FLAGS16 &lt;strong&gt;flags&lt;/strong&gt;: &lt;em&gt;O_LARGEFILE&lt;/em&gt;, &lt;em&gt;O_DIRECTORY&lt;/em&gt;, &lt;em&gt;O_DIRECT&lt;/em&gt;, &lt;em&gt;O_TRUNC&lt;/em&gt;, &lt;em&gt;O_SYNC&lt;/em&gt;, &lt;em&gt;O_NONBLOCK&lt;/em&gt;, &lt;em&gt;O_EXCL&lt;/em&gt;, &lt;em&gt;O_DSYNC&lt;/em&gt;, &lt;em&gt;O_APPEND&lt;/em&gt;, &lt;em&gt;O_CREAT&lt;/em&gt;, &lt;em&gt;O_RDWR&lt;/em&gt;, &lt;em&gt;O_WRONLY&lt;/em&gt;, &lt;em&gt;O_RDONLY&lt;/em&gt;, &lt;em&gt;O_CLOEXEC&lt;/em&gt;, &lt;em&gt;O_NONE&lt;/em&gt;, &lt;em&gt;O_TMPFILE&lt;/em&gt;, &lt;em&gt;O_F_CREATED&lt;/em&gt;, &lt;em&gt;FD_UPPER_LAYER&lt;/em&gt;, &lt;em&gt;FD_LOWER_LAYER&lt;/em&gt;, UINT64 &lt;strong&gt;initval&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;signalfd4&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;FD &lt;strong&gt;res&lt;/strong&gt;, FLAGS16 &lt;strong&gt;flags&lt;/strong&gt;: &lt;em&gt;O_LARGEFILE&lt;/em&gt;, &lt;em&gt;O_DIRECTORY&lt;/em&gt;, &lt;em&gt;O_DIRECT&lt;/em&gt;, &lt;em&gt;O_TRUNC&lt;/em&gt;, &lt;em&gt;O_SYNC&lt;/em&gt;, &lt;em&gt;O_NONBLOCK&lt;/em&gt;, &lt;em&gt;O_EXCL&lt;/em&gt;, &lt;em&gt;O_DSYNC&lt;/em&gt;, &lt;em&gt;O_APPEND&lt;/em&gt;, &lt;em&gt;O_CREAT&lt;/em&gt;, &lt;em&gt;O_RDWR&lt;/em&gt;, &lt;em&gt;O_WRONLY&lt;/em&gt;, &lt;em&gt;O_RDONLY&lt;/em&gt;, &lt;em&gt;O_CLOEXEC&lt;/em&gt;, &lt;em&gt;O_NONE&lt;/em&gt;, &lt;em&gt;O_TMPFILE&lt;/em&gt;, &lt;em&gt;O_F_CREATED&lt;/em&gt;, &lt;em&gt;FD_UPPER_LAYER&lt;/em&gt;, &lt;em&gt;FD_LOWER_LAYER&lt;/em&gt;, FD &lt;strong&gt;fd&lt;/strong&gt;, UINT32 &lt;strong&gt;mask&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;prctl&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;ERRNO &lt;strong&gt;res&lt;/strong&gt;, ENUMFLAGS32 &lt;strong&gt;option&lt;/strong&gt;: &lt;em&gt;PR_GET_DUMPABLE&lt;/em&gt;, &lt;em&gt;PR_SET_DUMPABLE&lt;/em&gt;, &lt;em&gt;PR_GET_KEEPCAPS&lt;/em&gt;, &lt;em&gt;PR_SET_KEEPCAPS&lt;/em&gt;, &lt;em&gt;PR_SET_NAME&lt;/em&gt;, &lt;em&gt;PR_GET_NAME&lt;/em&gt;, &lt;em&gt;PR_GET_SECCOMP&lt;/em&gt;, &lt;em&gt;PR_SET_SECCOMP&lt;/em&gt;, &lt;em&gt;PR_CAPBSET_READ&lt;/em&gt;, &lt;em&gt;PR_CAPBSET_DROP&lt;/em&gt;, &lt;em&gt;PR_GET_SECUREBITS&lt;/em&gt;, &lt;em&gt;PR_SET_SECUREBITS&lt;/em&gt;, &lt;em&gt;PR_MCE_KILL&lt;/em&gt;, &lt;em&gt;PR_MCE_KILL&lt;/em&gt;, &lt;em&gt;PR_SET_MM&lt;/em&gt;, &lt;em&gt;PR_SET_CHILD_SUBREAPER&lt;/em&gt;, &lt;em&gt;PR_GET_CHILD_SUBREAPER&lt;/em&gt;, &lt;em&gt;PR_SET_NO_NEW_PRIVS&lt;/em&gt;, &lt;em&gt;PR_GET_NO_NEW_PRIVS&lt;/em&gt;, &lt;em&gt;PR_GET_TID_ADDRESS&lt;/em&gt;, &lt;em&gt;PR_SET_THP_DISABLE&lt;/em&gt;, &lt;em&gt;PR_GET_THP_DISABLE&lt;/em&gt;, &lt;em&gt;PR_CAP_AMBIENT&lt;/em&gt;, CHARBUF &lt;strong&gt;arg2_str&lt;/strong&gt;, INT64 &lt;strong&gt;arg2_int&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;memfd_create&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;FD &lt;strong&gt;fd&lt;/strong&gt;, CHARBUF &lt;strong&gt;name&lt;/strong&gt;, FLAGS32 &lt;strong&gt;flags&lt;/strong&gt;: &lt;em&gt;MFD_CLOEXEC&lt;/em&gt;, &lt;em&gt;MFD_ALLOW_SEALING&lt;/em&gt;, &lt;em&gt;MFD_HUGETLB&lt;/em&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;pidfd_getfd&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;FD &lt;strong&gt;fd&lt;/strong&gt;, FD &lt;strong&gt;pid_fd&lt;/strong&gt;, FD &lt;strong&gt;target_fd&lt;/strong&gt;, UINT32 &lt;strong&gt;flags&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;pidfd_open&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;FD &lt;strong&gt;fd&lt;/strong&gt;, PID &lt;strong&gt;pid&lt;/strong&gt;, FLAGS32 &lt;strong&gt;flags&lt;/strong&gt;: &lt;em&gt;PIDFD_NONBLOCK&lt;/em&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;init_module&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;ERRNO &lt;strong&gt;res&lt;/strong&gt;, BYTEBUF &lt;strong&gt;img&lt;/strong&gt;, UINT64 &lt;strong&gt;length&lt;/strong&gt;, CHARBUF &lt;strong&gt;uargs&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;finit_module&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;ERRNO &lt;strong&gt;res&lt;/strong&gt;, FD &lt;strong&gt;fd&lt;/strong&gt;, CHARBUF &lt;strong&gt;uargs&lt;/strong&gt;, FLAGS32 &lt;strong&gt;flags&lt;/strong&gt;: &lt;em&gt;MODULE_INIT_IGNORE_MODVERSIONS&lt;/em&gt;, &lt;em&gt;MODULE_INIT_IGNORE_VERMAGIC&lt;/em&gt;, &lt;em&gt;MODULE_INIT_COMPRESSED_FILE&lt;/em&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;mknod&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;ERRNO &lt;strong&gt;res&lt;/strong&gt;, FSPATH &lt;strong&gt;path&lt;/strong&gt;, MODE &lt;strong&gt;mode&lt;/strong&gt;, UINT32 &lt;strong&gt;dev&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;mknodat&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;ERRNO &lt;strong&gt;res&lt;/strong&gt;, FD &lt;strong&gt;dirfd&lt;/strong&gt;, FSRELPATH &lt;strong&gt;path&lt;/strong&gt;, MODE &lt;strong&gt;mode&lt;/strong&gt;, UINT32 &lt;strong&gt;dev&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;newfstatat&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;ERRNO &lt;strong&gt;res&lt;/strong&gt;, FD &lt;strong&gt;dirfd&lt;/strong&gt;, FSRELPATH &lt;strong&gt;path&lt;/strong&gt;, FLAGS32 &lt;strong&gt;flags&lt;/strong&gt;: &lt;em&gt;AT_EMPTY_PATH&lt;/em&gt;, &lt;em&gt;AT_NO_AUTOMOUNT&lt;/em&gt;, &lt;em&gt;AT_SYMLINK_NOFOLLOW&lt;/em&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;process_vm_readv&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;INT64 &lt;strong&gt;res&lt;/strong&gt;, PID &lt;strong&gt;pid&lt;/strong&gt;, BYTEBUF &lt;strong&gt;data&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;process_vm_writev&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;INT64 &lt;strong&gt;res&lt;/strong&gt;, PID &lt;strong&gt;pid&lt;/strong&gt;, BYTEBUF &lt;strong&gt;data&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;delete_module&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;ERRNO &lt;strong&gt;res&lt;/strong&gt;, CHARBUF &lt;strong&gt;name&lt;/strong&gt;, FLAGS32 &lt;strong&gt;flags&lt;/strong&gt;: &lt;em&gt;O_NONBLOCK&lt;/em&gt;, &lt;em&gt;O_TRUNC&lt;/em&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;setreuid&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;ERRNO &lt;strong&gt;res&lt;/strong&gt;, UID &lt;strong&gt;ruid&lt;/strong&gt;, UID &lt;strong&gt;euid&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;setregid&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;ERRNO &lt;strong&gt;res&lt;/strong&gt;, UID &lt;strong&gt;rgid&lt;/strong&gt;, UID &lt;strong&gt;egid&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;adjtimex&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;adjtimex&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;exit&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;exit&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;sethostname&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;sethostname&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;getsid&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;getsid&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;fstatfs&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;fstatfs&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;pivot_root&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;pivot_root&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;oldstat&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;oldstat&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;umask&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;umask&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;madvise&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;madvise&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;statfs64&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;statfs64&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;iopl&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;iopl&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;swapon&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;swapon&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;utime&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;utime&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;getpid&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;getpid&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;setdomainname&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;setdomainname&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;semtimedop&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;semtimedop&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;mq_notify&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;mq_notify&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;nfsservctl&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;nfsservctl&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;pkey_mprotect&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;pkey_mprotect&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;fgetxattr&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;fgetxattr&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;sysinfo&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;sysinfo&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;uselib&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;uselib&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;olduname&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;olduname&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;set_mempolicy&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;set_mempolicy&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;getppid&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;getppid&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;sched_yield&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;sched_yield&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;getrusage&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;getrusage&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;sigsuspend&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;sigsuspend&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;riscv_hwprobe&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;riscv_hwprobe&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;bdflush&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;bdflush&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;get_kernel_syms&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;get_kernel_syms&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;pause&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;pause&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;getpmsg&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;getpmsg&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;clock_gettime&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;clock_gettime&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;mq_getsetattr&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;mq_getsetattr&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;spu_run&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;spu_run&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;personality&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;personality&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;request_key&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;request_key&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;readlink&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;readlink&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;times&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;times&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;reboot&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;reboot&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;syslog&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;syslog&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;ipc&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;ipc&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;create_module&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;create_module&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;listxattr&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;listxattr&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;setxattr&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;setxattr&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;setpriority&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;setpriority&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;sigreturn&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;sigreturn&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;setgroups&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;setgroups&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;preadv2&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;preadv2&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;setitimer&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;setitimer&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;shmat&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;shmat&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;getitimer&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;getitimer&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;removexattr&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;removexattr&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;msgget&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;msgget&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;spu_create&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;spu_create&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;capget&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;capget&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;rt_sigsuspend&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;rt_sigsuspend&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;mseal&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;mseal&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;fanotify_init&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;fanotify_init&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;readdir&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;readdir&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;getxattr&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;getxattr&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;mq_timedreceive&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;mq_timedreceive&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;nice&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;nice&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;fsopen&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;fsopen&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;rt_sigpending&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;rt_sigpending&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;sysfs&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;sysfs&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;acct&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;acct&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;setfsgid&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;setfsgid&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;sync&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;sync&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;clock_adjtime&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;clock_adjtime&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;io_getevents&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;io_getevents&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;query_module&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;query_module&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;remap_file_pages&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;remap_file_pages&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;rt_sigprocmask&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;rt_sigprocmask&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;mincore&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;mincore&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;getpgid&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;getpgid&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;msgsnd&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;msgsnd&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;sched_getparam&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;sched_getparam&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;getgroups&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;getgroups&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;ustat&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;ustat&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;uname&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;uname&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;epoll_ctl&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;epoll_ctl&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;lgetxattr&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;lgetxattr&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;_sysctl&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;_sysctl&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;rt_sigtimedwait&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;rt_sigtimedwait&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;flistxattr&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;flistxattr&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;pkey_alloc&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;pkey_alloc&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;time&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;time&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;kcmp&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;kcmp&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;epoll_pwait&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;epoll_pwait&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;oldlstat&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;oldlstat&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;sched_setscheduler&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;sched_setscheduler&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;statfs&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;statfs&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;fdatasync&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;fdatasync&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;set_robust_list&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;set_robust_list&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;swapoff&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;swapoff&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;quotactl_fd&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;quotactl_fd&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;exit_group&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;exit_group&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;listmount&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;listmount&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;timerfd_settime&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;timerfd_settime&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;sched_getscheduler&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;sched_getscheduler&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;sched_get_priority_min&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;sched_get_priority_min&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;ftruncate&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;ftruncate&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;pkey_free&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;pkey_free&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;sched_rr_get_interval&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;sched_rr_get_interval&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;open_tree&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;open_tree&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;idle&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;idle&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;mremap&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;mremap&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;rt_sigaction&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;rt_sigaction&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;stime&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;stime&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;sched_getattr&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;sched_getattr&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;rt_sigqueueinfo&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;rt_sigqueueinfo&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;sync_file_range&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;sync_file_range&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;mq_unlink&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;mq_unlink&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;alarm&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;alarm&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;inotify_rm_watch&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;inotify_rm_watch&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;lsetxattr&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;lsetxattr&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;timer_delete&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;timer_delete&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;msync&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;msync&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;timer_settime&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;timer_settime&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;sigprocmask&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;sigprocmask&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;lremovexattr&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;lremovexattr&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;fremovexattr&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;fremovexattr&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;sched_setaffinity&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;sched_setaffinity&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;fsetxattr&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;fsetxattr&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;settimeofday&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;settimeofday&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;gettimeofday&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;gettimeofday&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;io_setup&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;io_setup&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;llistxattr&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;llistxattr&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;fsync&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;fsync&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;pidfd_send_signal&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;pidfd_send_signal&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;getrandom&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;getrandom&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;s390_sthyi&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;s390_sthyi&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;io_destroy&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;io_destroy&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;sigaltstack&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;sigaltstack&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;riscv_flush_icache&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;riscv_flush_icache&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;mount_setattr&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;mount_setattr&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;getpgrp&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;getpgrp&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;vhangup&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;vhangup&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;set_tid_address&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;set_tid_address&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;timer_create&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;timer_create&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;timer_gettime&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;timer_gettime&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;timer_getoverrun&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;timer_getoverrun&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;clock_settime&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;clock_settime&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;clock_getres&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;clock_getres&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;utimes&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;utimes&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;vm86&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;vm86&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;lsm_set_self_attr&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;lsm_set_self_attr&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;clock_nanosleep&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;clock_nanosleep&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;futimesat&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;futimesat&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;signal&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;signal&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;mq_open&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;mq_open&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;keyctl&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;keyctl&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;ioprio_set&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;ioprio_set&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;landlock_add_rule&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;landlock_add_rule&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;add_key&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;add_key&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;set_thread_area&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;set_thread_area&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;ioprio_get&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;ioprio_get&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;sync_file_range2&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;sync_file_range2&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;ioperm&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;ioperm&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;sigaction&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;sigaction&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;inotify_add_watch&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;inotify_add_watch&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;fallocate&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;fallocate&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;get_thread_area&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;get_thread_area&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;readlinkat&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;readlinkat&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;name_to_handle_at&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;name_to_handle_at&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;perf_event_open&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;perf_event_open&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;kexec_load&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;kexec_load&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;truncate&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;truncate&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;faccessat&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;faccessat&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;mq_timedsend&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;mq_timedsend&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;restart_syscall&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;restart_syscall&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;map_shadow_stack&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;map_shadow_stack&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;pselect6&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;pselect6&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;epoll_ctl_old&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;epoll_ctl_old&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;get_robust_list&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;get_robust_list&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;tee&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;tee&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;vmsplice&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;vmsplice&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;getcpu&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;getcpu&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;utimensat&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;utimensat&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;rseq&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;rseq&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;timerfd_gettime&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;timerfd_gettime&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;syncfs&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;syncfs&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;msgctl&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;msgctl&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;io_submit&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;io_submit&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;oldolduname&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;oldolduname&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;shmdt&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;shmdt&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;sched_getaffinity&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;sched_getaffinity&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;fstatat64&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;fstatat64&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;socketcall&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;socketcall&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;waitid&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;waitid&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;sgetmask&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;sgetmask&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;io_cancel&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;io_cancel&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;sched_setparam&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;sched_setparam&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;cachestat&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;cachestat&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;sched_setattr&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;sched_setattr&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;ssetmask&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;ssetmask&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;_newselect&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;_newselect&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;setfsuid&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;setfsuid&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;sigpending&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;sigpending&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;wait4&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;wait4&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;process_mrelease&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;process_mrelease&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;waitpid&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;waitpid&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;arch_prctl&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;arch_prctl&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;rt_sigreturn&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;rt_sigreturn&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;fadvise64&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;fadvise64&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;msgrcv&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;msgrcv&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;move_mount&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;move_mount&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;lookup_dcookie&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;lookup_dcookie&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;fspick&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;fspick&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;shmget&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;shmget&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;fsmount&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;fsmount&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;epoll_pwait2&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;epoll_pwait2&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;move_pages&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;move_pages&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;shmctl&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;shmctl&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;memfd_secret&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;memfd_secret&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;landlock_restrict_self&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;landlock_restrict_self&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;sched_get_priority_max&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;sched_get_priority_max&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;sys_debug_setcontext&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;sys_debug_setcontext&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;kexec_file_load&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;kexec_file_load&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;process_madvise&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;process_madvise&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;landlock_create_ruleset&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;landlock_create_ruleset&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;rt_tgsigqueueinfo&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;rt_tgsigqueueinfo&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;migrate_pages&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;migrate_pages&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;fstatfs64&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;fstatfs64&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;pwritev2&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;pwritev2&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;mbind&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;mbind&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;modify_ldt&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;modify_ldt&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;gettid&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;gettid&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;statx&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;statx&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;getpriority&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;getpriority&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;io_pgetevents&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;io_pgetevents&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;listxattrat&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;listxattrat&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;set_mempolicy_home_node&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;set_mempolicy_home_node&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;readahead&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;readahead&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;futex_waitv&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;futex_waitv&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;epoll_wait_old&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;epoll_wait_old&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;faccessat2&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;faccessat2&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;get_mempolicy&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;get_mempolicy&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;membarrier&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;membarrier&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;pciconfig_iobase&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;pciconfig_iobase&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;close_range&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;close_range&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;fanotify_mark&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;fanotify_mark&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;open_tree_attr&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;open_tree_attr&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;timerfd&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;timerfd&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;s390_pci_mmio_read&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;s390_pci_mmio_read&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;s390_pci_mmio_write&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;s390_pci_mmio_write&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;s390_runtime_instr&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;s390_runtime_instr&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;s390_guarded_storage&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;s390_guarded_storage&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;fchmodat2&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;fchmodat2&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;futex_wake&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;futex_wake&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;futex_requeue&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;futex_requeue&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;futex_wait&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;futex_wait&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;switch_endian&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;switch_endian&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;multiplexer&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;multiplexer&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;oldfstat&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;oldfstat&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;lsm_get_self_attr&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;lsm_get_self_attr&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;swapcontext&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;swapcontext&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;pciconfig_write&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;pciconfig_write&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;rtas&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;rtas&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;pciconfig_read&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;pciconfig_read&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;subpage_prot&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;subpage_prot&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;statmount&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;statmount&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;lsm_list_modules&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;lsm_list_modules&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;uretprobe&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;uretprobe&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;removexattrat&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;removexattrat&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;getxattrat&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;getxattrat&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;setxattrat&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;setxattrat&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;file_getattr&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;file_getattr&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;file_setattr&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;file_setattr&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;SYSCALLID &lt;strong&gt;ID&lt;/strong&gt;, UINT16 &lt;strong&gt;nativeID&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="tracepoint-events"&gt;Tracepoint events&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style="text-align: left"&gt;Default&lt;/th&gt;
&lt;th style="text-align: left"&gt;Dir&lt;/th&gt;
&lt;th style="text-align: left"&gt;Name&lt;/th&gt;
&lt;th style="text-align: left"&gt;Params&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;switch&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;PID &lt;strong&gt;next&lt;/strong&gt;, UINT64 &lt;strong&gt;pgft_maj&lt;/strong&gt;, UINT64 &lt;strong&gt;pgft_min&lt;/strong&gt;, UINT32 &lt;strong&gt;vm_size&lt;/strong&gt;, UINT32 &lt;strong&gt;vm_rss&lt;/strong&gt;, UINT32 &lt;strong&gt;vm_swap&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;procexit&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;ERRNO &lt;strong&gt;status&lt;/strong&gt;, ERRNO &lt;strong&gt;ret&lt;/strong&gt;, SIGTYPE &lt;strong&gt;sig&lt;/strong&gt;, UINT8 &lt;strong&gt;core&lt;/strong&gt;, PID &lt;strong&gt;reaper_tid&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;signaldeliver&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;PID &lt;strong&gt;spid&lt;/strong&gt;, PID &lt;strong&gt;dpid&lt;/strong&gt;, SIGTYPE &lt;strong&gt;sig&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;page_fault&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;UINT64 &lt;strong&gt;addr&lt;/strong&gt;, UINT64 &lt;strong&gt;ip&lt;/strong&gt;, FLAGS32 &lt;strong&gt;error&lt;/strong&gt;: &lt;em&gt;PROTECTION_VIOLATION&lt;/em&gt;, &lt;em&gt;PAGE_NOT_PRESENT&lt;/em&gt;, &lt;em&gt;WRITE_ACCESS&lt;/em&gt;, &lt;em&gt;READ_ACCESS&lt;/em&gt;, &lt;em&gt;USER_FAULT&lt;/em&gt;, &lt;em&gt;SUPERVISOR_FAULT&lt;/em&gt;, &lt;em&gt;RESERVED_PAGE&lt;/em&gt;, &lt;em&gt;INSTRUCTION_FETCH&lt;/em&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="plugin-events"&gt;Plugin events&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style="text-align: left"&gt;Default&lt;/th&gt;
&lt;th style="text-align: left"&gt;Dir&lt;/th&gt;
&lt;th style="text-align: left"&gt;Name&lt;/th&gt;
&lt;th style="text-align: left"&gt;Params&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;pluginevent&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;UINT32 &lt;strong&gt;plugin_id&lt;/strong&gt;, BYTEBUF &lt;strong&gt;event_data&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="metaevents"&gt;Metaevents&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style="text-align: left"&gt;Default&lt;/th&gt;
&lt;th style="text-align: left"&gt;Dir&lt;/th&gt;
&lt;th style="text-align: left"&gt;Name&lt;/th&gt;
&lt;th style="text-align: left"&gt;Params&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;drop&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;UINT32 &lt;strong&gt;ratio&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;drop&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;UINT32 &lt;strong&gt;ratio&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;scapevent&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;UINT32 &lt;strong&gt;event_type&lt;/strong&gt;, UINT64 &lt;strong&gt;event_data&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;procinfo&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;UINT64 &lt;strong&gt;cpu_usr&lt;/strong&gt;, UINT64 &lt;strong&gt;cpu_sys&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;cpu_hotplug&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;UINT32 &lt;strong&gt;cpu&lt;/strong&gt;, UINT32 &lt;strong&gt;action&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;notification&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;CHARBUF &lt;strong&gt;id&lt;/strong&gt;, CHARBUF &lt;strong&gt;desc&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;infra&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;CHARBUF &lt;strong&gt;source&lt;/strong&gt;, CHARBUF &lt;strong&gt;name&lt;/strong&gt;, CHARBUF &lt;strong&gt;description&lt;/strong&gt;, CHARBUF &lt;strong&gt;scope&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;container&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;CHARBUF &lt;strong&gt;json&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;useradded&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;UINT32 &lt;strong&gt;uid&lt;/strong&gt;, UINT32 &lt;strong&gt;gid&lt;/strong&gt;, CHARBUF &lt;strong&gt;name&lt;/strong&gt;, CHARBUF &lt;strong&gt;home&lt;/strong&gt;, CHARBUF &lt;strong&gt;shell&lt;/strong&gt;, CHARBUF &lt;strong&gt;container_id&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;userdeleted&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;UINT32 &lt;strong&gt;uid&lt;/strong&gt;, UINT32 &lt;strong&gt;gid&lt;/strong&gt;, CHARBUF &lt;strong&gt;name&lt;/strong&gt;, CHARBUF &lt;strong&gt;home&lt;/strong&gt;, CHARBUF &lt;strong&gt;shell&lt;/strong&gt;, CHARBUF &lt;strong&gt;container_id&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;groupadded&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;UINT32 &lt;strong&gt;gid&lt;/strong&gt;, CHARBUF &lt;strong&gt;name&lt;/strong&gt;, CHARBUF &lt;strong&gt;container_id&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;groupdeleted&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;UINT32 &lt;strong&gt;gid&lt;/strong&gt;, CHARBUF &lt;strong&gt;name&lt;/strong&gt;, CHARBUF &lt;strong&gt;container_id&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;asyncevent&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;UINT32 &lt;strong&gt;plugin_id&lt;/strong&gt;, CHARBUF &lt;strong&gt;name&lt;/strong&gt;, BYTEBUF &lt;strong&gt;data&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;</description></item><item><title>Docs: Contributor of the Month</title><link>https://v0-43--falcosecurity.netlify.app/docs/contribute/contributor-of-the-month/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://v0-43--falcosecurity.netlify.app/docs/contribute/contributor-of-the-month/</guid><description>
&lt;p&gt;Hundreds of developers around the world contribute to Falco open source projects. Our Hall of Fame honors the best of the best.&lt;/p&gt;
&lt;h2 id="falco-contributor-of-the-month"&gt;Falco Contributor of the Month&lt;/h2&gt;
&lt;p&gt;The title of “Contributor of the Month” is awarded to an outstanding contributor for the month of the year.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Month of the Year&lt;/th&gt;
&lt;th&gt;Contributor of the Month&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;November, 2020&lt;/td&gt;
&lt;td&gt;&lt;a href="https://github.com/Issif"&gt;Thomas Labarussias&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;December, 2020&lt;/td&gt;
&lt;td&gt;&lt;a href="https://github.com/maxgio92"&gt;Massimiliano Giovagnoli&lt;/a&gt;, and &lt;a href="https://github.com/jonahjon"&gt;Jonah Jones&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;January, 2021&lt;/td&gt;
&lt;td&gt;&lt;a href="https://github.com/cpanato"&gt;Carlos Panato&lt;/a&gt;, &lt;a href="https://github.com/KeisukeYamashita"&gt;KeisukeYamashita&lt;/a&gt;, and &lt;a href="https://github.com/Rajakavitha1"&gt;Rajakavitha Kodhandapani&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;February, 2021&lt;/td&gt;
&lt;td&gt;&lt;a href="https://github.com/n3wscott"&gt;Scott Nichols&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;March, 2021&lt;/td&gt;
&lt;td&gt;&lt;a href="https://github.com/fjogeleit"&gt;Frank Jogeleit&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;April, 2021&lt;/td&gt;
&lt;td&gt;&lt;a href="https://github.com/developer-guy"&gt;Batuhan Apaydın&lt;/a&gt; and &lt;a href="https://github.com/evalsocket"&gt;Yuvraj&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;May, 2021&lt;/td&gt;
&lt;td&gt;&lt;a href="https://github.com/developer-guy"&gt;Batuhan Apaydın&lt;/a&gt; and &lt;a href="https://github.com/evalsocket"&gt;Yuvraj&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;June, 2021&lt;/td&gt;
&lt;td&gt;&lt;a href="https://github.com/ismailyenigul"&gt;Ismail Yenigul&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;July, 2021&lt;/td&gt;
&lt;td&gt;&lt;a href="https://github.com/Dentrax"&gt;Furkan Türkal&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;August, 2021&lt;/td&gt;
&lt;td&gt;&lt;a href="https://github.com/terylt"&gt;Teryl Taylor&lt;/a&gt; and &lt;a href="https://github.com/araujof"&gt;Frederico Araujo&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;September and October, 2021&lt;/td&gt;
&lt;td&gt;&lt;a href="https://github.com/leodido"&gt;Leo Di Donato&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;November and December, 2021&lt;/td&gt;
&lt;td&gt;&lt;a href="https://github.com/pabloopez"&gt;Pablo Lopez Zaldivar&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;January and February, 2022&lt;/td&gt;
&lt;td&gt;&lt;a href="https://github.com/alban"&gt;Alban Créquy&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;January 2023&lt;/td&gt;
&lt;td&gt;&lt;a href="https://github.com/EXONER4TED"&gt;Logan Bond&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;February 2023&lt;/td&gt;
&lt;td&gt;&lt;a href="https://github.com/incertum"&gt;Melissa Kilby&lt;/a&gt; and &lt;a href="https://github.com/dwindsor"&gt;David Windsor&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;</description></item><item><title>Docs: Go Client</title><link>https://v0-43--falcosecurity.netlify.app/docs/developer-guide/grpc/client-go/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://v0-43--falcosecurity.netlify.app/docs/developer-guide/grpc/client-go/</guid><description>
&lt;div class="card card-sm pageinfo pageinfo-warning my-4"&gt;
&lt;div class="card-body"&gt;
&lt;div class="card-text"&gt;
&lt;p&gt;The gRPC Output as well as the embedded gRPC server have been deprecated in Falco &lt;code&gt;0.43.0&lt;/code&gt; and will be removed in a
future release. Until removal and since Falco &lt;code&gt;0.43.0&lt;/code&gt;, using any of them will result in a warning informing the user
about the deprecation. Users are encouraged to leverage another output and/or Falcosidekick, as the usage will result
in an error after the removal.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;The &lt;a href="https://github.com/falcosecurity/client-go"&gt;client-go&lt;/a&gt; Go library provides:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://godoc.org/github.com/falcosecurity/client-go/pkg/api/outputs"&gt;type and service mappings&lt;/a&gt; for the Falco gRPC API. For more information, see &lt;a href="https://v0-43--falcosecurity.netlify.app/docs/grpc/outputs"&gt;output schema&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Client&lt;/code&gt; and &lt;code&gt;Config&lt;/code&gt; structs that simplify the connection to the gRPC server. For more information, see &lt;a href="https://godoc.org/github.com/falcosecurity/client-go/pkg/client"&gt;documentation&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Refer to the &lt;a href="https://github.com/falcosecurity/client-go/blob/master/examples/output/main.go"&gt;fully-functional example&lt;/a&gt; to see how the Go client connects to the Falco gRPC Outputs API and displays the events in JSON.&lt;/p&gt;
&lt;p&gt;Additional examples for various APIs are located in the &lt;a href="https://github.com/falcosecurity/client-go/tree/master/examples"&gt;examples&lt;/a&gt; directory of the &lt;a href="https://github.com/falcosecurity/client-go"&gt;client-go&lt;/a&gt; repository.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Ensure that you have the certificates in the example's path at &lt;code&gt;/etc/falco/certs/{client.crt,client.key,ca.crt}&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;In the &lt;a href="https://github.com/falcosecurity/client-go"&gt;client-go&lt;/a&gt; root directory, run:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;$ go run examples/output/main.go | jq
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The output events start flowing in depending on the set of rules in the Falco instance.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-json" data-lang="json"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#008000;font-weight:bold"&gt;&amp;#34;time&amp;#34;&lt;/span&gt;: {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#008000;font-weight:bold"&gt;&amp;#34;seconds&amp;#34;&lt;/span&gt;: &lt;span style="color:#666"&gt;1570094449&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#008000;font-weight:bold"&gt;&amp;#34;nanos&amp;#34;&lt;/span&gt;: &lt;span style="color:#666"&gt;259268899&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; },
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#008000;font-weight:bold"&gt;&amp;#34;priority&amp;#34;&lt;/span&gt;: &lt;span style="color:#666"&gt;3&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#008000;font-weight:bold"&gt;&amp;#34;rule&amp;#34;&lt;/span&gt;: &lt;span style="color:#b44"&gt;&amp;#34;Modify binary dirs&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#008000;font-weight:bold"&gt;&amp;#34;output&amp;#34;&lt;/span&gt;: &lt;span style="color:#b44"&gt;&amp;#34;09:20:49.259268899: Error File below known binary directory renamed/removed (user=vagrant command=lua /home/vagrant/.dotfiles/zsh/.config/zsh/plugins/z.lua/z.lua --init zsh once enhanced pcmdline=zsh operation=rena
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#b44"&gt;me file=&amp;lt;NA&amp;gt; res=0 oldpath=/usr/bin/realpath newpath=/usr/bin/realpath container_id=host image=&amp;lt;NA&amp;gt;)&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#008000;font-weight:bold"&gt;&amp;#34;output_fields&amp;#34;&lt;/span&gt;: {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#008000;font-weight:bold"&gt;&amp;#34;container.id&amp;#34;&lt;/span&gt;: &lt;span style="color:#b44"&gt;&amp;#34;host&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#008000;font-weight:bold"&gt;&amp;#34;container.image.repository&amp;#34;&lt;/span&gt;: &lt;span style="color:#b44"&gt;&amp;#34;&amp;lt;NA&amp;gt;&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#008000;font-weight:bold"&gt;&amp;#34;evt.args&amp;#34;&lt;/span&gt;: &lt;span style="color:#b44"&gt;&amp;#34;res=0 oldpath=/usr/bin/realpath newpath=/usr/bin/realpath &amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#008000;font-weight:bold"&gt;&amp;#34;evt.time&amp;#34;&lt;/span&gt;: &lt;span style="color:#b44"&gt;&amp;#34;09:20:49.259268899&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#008000;font-weight:bold"&gt;&amp;#34;evt.type&amp;#34;&lt;/span&gt;: &lt;span style="color:#b44"&gt;&amp;#34;rename&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#008000;font-weight:bold"&gt;&amp;#34;fd.name&amp;#34;&lt;/span&gt;: &lt;span style="color:#b44"&gt;&amp;#34;&amp;lt;NA&amp;gt;&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#008000;font-weight:bold"&gt;&amp;#34;proc.cmdline&amp;#34;&lt;/span&gt;: &lt;span style="color:#b44"&gt;&amp;#34;lua /home/vagrant/.dotfiles/zsh/.config/zsh/plugins/z.lua/z.lua --init zsh once enhanced&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#008000;font-weight:bold"&gt;&amp;#34;proc.pcmdline&amp;#34;&lt;/span&gt;: &lt;span style="color:#b44"&gt;&amp;#34;zsh&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#008000;font-weight:bold"&gt;&amp;#34;user.name&amp;#34;&lt;/span&gt;: &lt;span style="color:#b44"&gt;&amp;#34;vagrant&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#008000;font-weight:bold"&gt;&amp;#34;time&amp;#34;&lt;/span&gt;: {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#008000;font-weight:bold"&gt;&amp;#34;seconds&amp;#34;&lt;/span&gt;: &lt;span style="color:#666"&gt;1570094449&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#008000;font-weight:bold"&gt;&amp;#34;nanos&amp;#34;&lt;/span&gt;: &lt;span style="color:#666"&gt;620298462&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; },
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#008000;font-weight:bold"&gt;&amp;#34;priority&amp;#34;&lt;/span&gt;: &lt;span style="color:#666"&gt;4&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#008000;font-weight:bold"&gt;&amp;#34;rule&amp;#34;&lt;/span&gt;: &lt;span style="color:#b44"&gt;&amp;#34;Delete or rename shell history&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#008000;font-weight:bold"&gt;&amp;#34;output&amp;#34;&lt;/span&gt;: &lt;span style="color:#b44"&gt;&amp;#34;09:20:49.620298462: Warning Shell history had been deleted or renamed (user=vagrant type=unlink command=zsh fd.name=&amp;lt;NA&amp;gt; name=&amp;lt;NA&amp;gt; path=/home/vagrant/.zsh_history.LOCK oldpath=&amp;lt;NA&amp;gt; host (id=host))&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#008000;font-weight:bold"&gt;&amp;#34;output_fields&amp;#34;&lt;/span&gt;: {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#008000;font-weight:bold"&gt;&amp;#34;container.id&amp;#34;&lt;/span&gt;: &lt;span style="color:#b44"&gt;&amp;#34;host&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#008000;font-weight:bold"&gt;&amp;#34;container.name&amp;#34;&lt;/span&gt;: &lt;span style="color:#b44"&gt;&amp;#34;host&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#008000;font-weight:bold"&gt;&amp;#34;evt.arg.name&amp;#34;&lt;/span&gt;: &lt;span style="color:#b44"&gt;&amp;#34;&amp;lt;NA&amp;gt;&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#008000;font-weight:bold"&gt;&amp;#34;evt.arg.oldpath&amp;#34;&lt;/span&gt;: &lt;span style="color:#b44"&gt;&amp;#34;&amp;lt;NA&amp;gt;&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#008000;font-weight:bold"&gt;&amp;#34;evt.arg.path&amp;#34;&lt;/span&gt;: &lt;span style="color:#b44"&gt;&amp;#34;/home/vagrant/.zsh_history.LOCK&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#008000;font-weight:bold"&gt;&amp;#34;evt.time&amp;#34;&lt;/span&gt;: &lt;span style="color:#b44"&gt;&amp;#34;09:20:49.620298462&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#008000;font-weight:bold"&gt;&amp;#34;evt.type&amp;#34;&lt;/span&gt;: &lt;span style="color:#b44"&gt;&amp;#34;unlink&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#008000;font-weight:bold"&gt;&amp;#34;fd.name&amp;#34;&lt;/span&gt;: &lt;span style="color:#b44"&gt;&amp;#34;&amp;lt;NA&amp;gt;&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#008000;font-weight:bold"&gt;&amp;#34;proc.cmdline&amp;#34;&lt;/span&gt;: &lt;span style="color:#b44"&gt;&amp;#34;zsh&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#008000;font-weight:bold"&gt;&amp;#34;user.name&amp;#34;&lt;/span&gt;: &lt;span style="color:#b44"&gt;&amp;#34;vagrant&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;/ol&gt;</description></item><item><title>Docs: Okta Events</title><link>https://v0-43--falcosecurity.netlify.app/docs/concepts/event-sources/plugins/okta/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://v0-43--falcosecurity.netlify.app/docs/concepts/event-sources/plugins/okta/</guid><description>
&lt;p&gt;The Falco &lt;a href="https://github.com/falcosecurity/plugins/blob/master/plugins/okta/README.md"&gt;Okta&lt;/a&gt; plugin can read &lt;a href="https://www.okta.com/"&gt;Okta&lt;/a&gt; logs and emit events for each Okta log entry.&lt;/p&gt;
&lt;p&gt;Falco also distributes out-of-the-box &lt;a href="https://github.com/falcosecurity/falco/blob/master/rules/okta_rules.yaml"&gt;rules&lt;/a&gt; that can be used to identify interesting/suspicious/notable events in Okta logs, including:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Creating a new OKTA user account&lt;/li&gt;
&lt;li&gt;Detecting a locked-out user&lt;/li&gt;
&lt;li&gt;Assigning admin permissions to an okta user&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="configuration"&gt;Configuration&lt;/h2&gt;
&lt;p&gt;See the &lt;a href="https://github.com/falcosecurity/plugins/blob/master/plugins/okta/README.md#settings"&gt;README&lt;/a&gt; for information on configuring the plugin. This simply involves providing the &lt;code&gt;organization/api&lt;/code&gt; token as part of init params. These can be added to &lt;code&gt;falco.yaml&lt;/code&gt; under the &lt;code&gt;plugins&lt;/code&gt; &lt;a href="https://v0-43--falcosecurity.netlify.app/docs/reference/daemon/config-options/"&gt;configuration key&lt;/a&gt; key.&lt;/p&gt;
&lt;p&gt;The plugin does not use any open params configuration.&lt;/p&gt;
&lt;h2 id="sample-output"&gt;Sample Output&lt;/h2&gt;
&lt;p&gt;For example, when using a dummy rule as follows:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;- rule: Dummy
desc: Dummy
condition: okta.app!=&amp;#34;&amp;#34;
output: &amp;#34;evt=%okta.evt.type user=%okta.actor.name ip=%okta.client.ip app=%okta.app&amp;#34;
priority: DEBUG
source: okta
tags: [okta]
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;The dummy rule will emit an alert for each Okta log entry, like the following:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;19:12:25.439350000: Debug evt=user.authentication.sso user=User1 ip=x.x.x.x app=google
19:12:30.675628000: Debug evt=user.authentication.sso user=User2 ip=x.x.x.x app=github
19:12:35.918456000: Debug evt=user.authentication.sso user=User3 ip=x.x.x.x app=office365
&lt;/code&gt;&lt;/pre&gt;</description></item><item><title>Docs: Overriding Rules</title><link>https://v0-43--falcosecurity.netlify.app/docs/concepts/rules/overriding/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://v0-43--falcosecurity.netlify.app/docs/concepts/rules/overriding/</guid><description>
&lt;h2 id="overview"&gt;Overview&lt;/h2&gt;
&lt;p&gt;There may be cases where you need to adjust the behavior of the Falco-supplied &lt;a class='glossary-tooltip' title='Lists are collections of items that can be included in rules, macros, or other lists.' data-toggle='tooltip' data-placement='top' href='https://v0-43--falcosecurity.netlify.app/docs/rules/basic-elements/#lists' target='_blank' aria-label='list'&gt;list&lt;/a&gt;, &lt;a class='glossary-tooltip' title='Macros are rule condition snippets that can be re-used inside rules and even other macros.' data-toggle='tooltip' data-placement='top' href='https://v0-43--falcosecurity.netlify.app/docs/rules/basic-elements/#macros' target='_blank' aria-label='macro'&gt;macro&lt;/a&gt;, and &lt;a class='glossary-tooltip' title='Rules are conditions under which an alert should be generated.' data-toggle='tooltip' data-placement='top' href='https://v0-43--falcosecurity.netlify.app/docs/rules/basic-elements/#rules' target='_blank' aria-label='rule'&gt;rule&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;You can override (modify) rules in Falco two different ways:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Define multiple rules files. The additional rules files can be used to add new lists, macros and rules or to override existing ones.&lt;/li&gt;
&lt;li&gt;You can override lists, macros, and rules in the same file so long as the override happens after the initial definition.&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="alert alert-warning" role="alert"&gt;
&lt;p&gt;Note that when overriding existing lists, macro, or rule the order of the rule configuration files matters. For example if you append to an existing default rule, you must ensure your custom rules file (e.g. &lt;code&gt;/etc/falco/rules.d/custom-rules.yaml&lt;/code&gt;) is loaded &lt;strong&gt;after&lt;/strong&gt; the default rules file (&lt;code&gt;/etc/falco/falco_rules.yaml&lt;/code&gt;).&lt;/p&gt;
&lt;p&gt;The load order can be configured from the command line using multiple &lt;code&gt;-r&lt;/code&gt; parameters in the right order, directly inside the Falco configuration file (&lt;code&gt;falco.yaml&lt;/code&gt;) via the &lt;code&gt;rules_files&lt;/code&gt; section or through the official Helm chart, using the &lt;code&gt;falco.rules_files&lt;/code&gt; value.&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;To facilitate modifying existing lists, macros and rules Falco provides an &lt;code&gt;override&lt;/code&gt; section that can be added to your custom rules file. Within the &lt;code&gt;override&lt;/code&gt; section you can specify whether you want to &lt;code&gt;append&lt;/code&gt; or &lt;code&gt;replace&lt;/code&gt; information for the given rule, list or macro.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;append&lt;/code&gt; allows you to add additional values to a list, macro, or rule key&lt;/p&gt;
&lt;p&gt;&lt;code&gt;replace&lt;/code&gt; allows you to replace the value of a list, macro or macro key&lt;/p&gt;
&lt;div class="alert alert-warning" role="alert"&gt;
&lt;code&gt;append&lt;/code&gt; and &lt;code&gt;replace&lt;/code&gt; cannot be used together. Trying to apply both will result in an error.
&lt;/div&gt;
&lt;p&gt;The keys that can be overridden vary by rules component and action being taken:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Lists (&lt;code&gt;append&lt;/code&gt; or &lt;code&gt;replace&lt;/code&gt;): &lt;code&gt;items&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Macros (&lt;code&gt;append&lt;/code&gt; or &lt;code&gt;replace&lt;/code&gt;): &lt;code&gt;condition&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Rules (&lt;code&gt;append&lt;/code&gt;): &lt;code&gt;condition&lt;/code&gt;, &lt;code&gt;output&lt;/code&gt;, &lt;code&gt;desc&lt;/code&gt;, &lt;code&gt;tags&lt;/code&gt;, &lt;code&gt;exceptions&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Rules (&lt;code&gt;replace&lt;/code&gt;): &lt;code&gt;condition&lt;/code&gt;, &lt;code&gt;output&lt;/code&gt; &lt;code&gt;desc&lt;/code&gt;, &lt;code&gt;priority&lt;/code&gt;, &lt;code&gt;tags&lt;/code&gt;, &lt;code&gt;exceptions&lt;/code&gt;, &lt;code&gt;enabled&lt;/code&gt;, &lt;code&gt;warn_evttypes&lt;/code&gt;, &lt;code&gt;skip-if-unknown-filter&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="examples-of-using-the-override-section"&gt;Examples of using the &lt;code&gt;override&lt;/code&gt; section&lt;/h2&gt;
&lt;p&gt;The following examples illustrate how you can use the override section to modify existing lists, macros, and rules.&lt;/p&gt;
&lt;p&gt;In all the examples below, it's assumed one is running Falco via &lt;code&gt;falco -r /etc/falco/falco_rules.yaml -r /etc/falco/falco_rules.local.yaml&lt;/code&gt;, or has the default entries for &lt;code&gt;rules_files&lt;/code&gt; in falco.yaml, which has &lt;code&gt;/etc/falco/falco.yaml&lt;/code&gt; first and &lt;code&gt;/etc/falco/falco_rules.local.yaml&lt;/code&gt; second.&lt;/p&gt;
&lt;h3 id="append-an-item-to-a-list"&gt;Append an item to a list&lt;/h3&gt;
&lt;h5 id="etc-falco-falco-rules-yaml"&gt;&lt;code&gt;/etc/falco/falco_rules.yaml&lt;/code&gt;&lt;/h5&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;- &lt;span style="color:#008000;font-weight:bold"&gt;list&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;my_programs&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;items&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;[ls, cat, pwd]&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;- &lt;span style="color:#008000;font-weight:bold"&gt;rule&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;my_programs_opened_file&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;desc&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;Track whenever a set of programs opens a file&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;condition&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;proc.name in (my_programs) and (evt.type=open or evt.type=openat)&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;output&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;A tracked program opened a file | user=%user.name command=%proc.cmdline file=%fd.name&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;priority&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;INFO&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h5 id="etc-falco-falco-rules-local-yaml"&gt;&lt;code&gt;/etc/falco/falco_rules.local.yaml&lt;/code&gt;&lt;/h5&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;- &lt;span style="color:#008000;font-weight:bold"&gt;list&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;my_programs&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;items&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;[cp]&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;override&lt;/span&gt;:&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;items&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;append&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The rule &lt;code&gt;my_programs_opened_file&lt;/code&gt; would trigger whenever any of &lt;code&gt;ls&lt;/code&gt;, &lt;code&gt;cat&lt;/code&gt;, &lt;code&gt;pwd&lt;/code&gt;, or &lt;code&gt;cp&lt;/code&gt; opened a file.&lt;/p&gt;
&lt;h3 id="replace-items-in-a-list"&gt;Replace items in a list&lt;/h3&gt;
&lt;h5 id="etc-falco-falco-rules-yaml-1"&gt;&lt;code&gt;/etc/falco/falco_rules.yaml&lt;/code&gt;&lt;/h5&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;- &lt;span style="color:#008000;font-weight:bold"&gt;list&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;my_programs&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;items&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;[ls, cat, pwd]&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;- &lt;span style="color:#008000;font-weight:bold"&gt;rule&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;my_programs_opened_file&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;desc&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;Track whenever a set of programs opens a file&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;condition&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;proc.name in (my_programs) and (evt.type=open or evt.type=openat)&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;output&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;A tracked program opened a file | user=%user.name command=%proc.cmdline file=%fd.name&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;priority&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;INFO&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h5 id="etc-falco-falco-rules-local-yaml-1"&gt;&lt;code&gt;/etc/falco/falco_rules.local.yaml&lt;/code&gt;&lt;/h5&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;- &lt;span style="color:#008000;font-weight:bold"&gt;list&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;my_programs&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;items&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;[vi, vim, nano] &lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;override&lt;/span&gt;:&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;items&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;replace&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The rule &lt;code&gt;my_programs_opened_file&lt;/code&gt; would trigger whenever any of &lt;code&gt;vi&lt;/code&gt;, &lt;code&gt;vim&lt;/code&gt;, or &lt;code&gt;nano&lt;/code&gt; opened a file.&lt;/p&gt;
&lt;h3 id="append-an-item-to-a-macro"&gt;Append an item to a macro&lt;/h3&gt;
&lt;h5 id="etc-falco-falco-rules-yaml-2"&gt;&lt;code&gt;/etc/falco/falco_rules.yaml&lt;/code&gt;&lt;/h5&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;- &lt;span style="color:#008000;font-weight:bold"&gt;macro&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;access_file&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;condition&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;evt.type=open&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;- &lt;span style="color:#008000;font-weight:bold"&gt;rule&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;program_accesses_file&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;desc&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;Track whenever a set of programs opens a file&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;condition&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;(access_file) and proc.name in (cat, ls)&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;output&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;A tracked program opened a file | user=%user.name command=%proc.cmdline file=%fd.name&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;priority&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;INFO&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h5 id="etc-falco-falco-rules-local-yaml-2"&gt;&lt;code&gt;/etc/falco/falco_rules.local.yaml&lt;/code&gt;&lt;/h5&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;- &lt;span style="color:#008000;font-weight:bold"&gt;macro&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;access_file&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;condition&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;or evt.type=openat&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;override&lt;/span&gt;:&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;condition&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;append&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The rule &lt;code&gt;program_accesses_file&lt;/code&gt; would trigger when &lt;code&gt;ls&lt;/code&gt;/&lt;code&gt;cat&lt;/code&gt; either used &lt;code&gt;open&lt;/code&gt;/&lt;code&gt;openat&lt;/code&gt; on a file.&lt;/p&gt;
&lt;h3 id="append-and-replace-items-in-a-rule"&gt;Append and replace items in a rule&lt;/h3&gt;
&lt;h5 id="etc-falco-falco-rules-yaml-3"&gt;&lt;code&gt;/etc/falco/falco_rules.yaml&lt;/code&gt;&lt;/h5&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;- &lt;span style="color:#008000;font-weight:bold"&gt;rule&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;program_accesses_file&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;desc&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;Yrack whenever a set of programs opens a file&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;condition&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;evt.type=open and proc.name in (cat, ls) &lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;output&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;A tracked program opened a file | user=%user.name command=%proc.cmdline file=%fd.name&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;priority&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;INFO&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h5 id="etc-falco-falco-rules-local-yaml-3"&gt;&lt;code&gt;/etc/falco/falco_rules.local.yaml&lt;/code&gt;&lt;/h5&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;- &lt;span style="color:#008000;font-weight:bold"&gt;rule&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;program_accesses_file&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;condition&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;and not user.name=root&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;output&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;A file (user=%user.name command=%proc.cmdline file=%fd.name) was opened by a monitored program&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;override&lt;/span&gt;:&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;condition&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;append&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;output&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;replace&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The rule &lt;code&gt;program_accesses_file&lt;/code&gt; would trigger when &lt;code&gt;ls&lt;/code&gt;/&lt;code&gt;cat&lt;/code&gt; either used &lt;code&gt;open&lt;/code&gt; on a file, but not if the user was root.&lt;/p&gt;
&lt;p&gt;The new output message would be &lt;code&gt;A file (user=%user.name command=%proc.cmdline file=%fd.name) was opened by a monitored program&lt;/code&gt;&lt;/p&gt;
&lt;h3 id="enabling-a-disabled-rule"&gt;Enabling a disabled rule&lt;/h3&gt;
&lt;p&gt;Using &lt;code&gt;enabled: true&lt;/code&gt; is deprecated, and should be avoided. Falco 0.37.0 and later will display a warning if &lt;code&gt;enabled: true&lt;/code&gt; is used.&lt;/p&gt;
&lt;h5 id="etc-falco-falco-rules-yaml-4"&gt;&lt;code&gt;/etc/falco/falco_rules.yaml&lt;/code&gt;&lt;/h5&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;- &lt;span style="color:#008000;font-weight:bold"&gt;rule&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;test_rule&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;desc&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;test rule description&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;condition&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;evt.type = close&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;output&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;user=%user.name command=%proc.cmdline file=%fd.name&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;priority&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;INFO&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;enabled&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;false&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h5 id="etc-falco-falco-rules-local-yaml-incorrect-usage-example"&gt;&lt;code&gt;/etc/falco/falco_rules.local.yaml&lt;/code&gt; (incorrect usage example)&lt;/h5&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;- &lt;span style="color:#008000;font-weight:bold"&gt;rule&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;test_rule&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;enabled&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;true&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Use the new &lt;code&gt;override&lt;/code&gt; section to enable the rule instead.&lt;/p&gt;
&lt;h5 id="etc-falco-falco-rules-yaml-5"&gt;&lt;code&gt;/etc/falco/falco_rules.yaml&lt;/code&gt;&lt;/h5&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;- &lt;span style="color:#008000;font-weight:bold"&gt;rule&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;test_rule&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;desc&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;test rule description&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;condition&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;evt.type = close&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;output&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;user=%user.name command=%proc.cmdline file=%fd.name&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;priority&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;INFO&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;enabled&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;false&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h5 id="etc-falco-falco-rules-local-yaml-correct-usage-example"&gt;&lt;code&gt;/etc/falco/falco_rules.local.yaml&lt;/code&gt; (correct usage example)&lt;/h5&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;- &lt;span style="color:#008000;font-weight:bold"&gt;rule&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;test_rule&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;enabled&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;true&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;override&lt;/span&gt;:&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;enabled&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;replace&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="precedence-of-logical-operators-when-appending"&gt;Precedence of logical operators when appending&lt;/h2&gt;
&lt;p&gt;Remember that when appending rules and macros, the content of the referring rule or macro is simply added to the condition of the referred one.
This can result in unintended results if the original rule/macro has potentially ambiguous logical operators.&lt;/p&gt;
&lt;p&gt;Here's an example:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;- &lt;span style="color:#008000;font-weight:bold"&gt;rule&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;my_rule&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;desc&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;...&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;condition&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;evt.type=open and proc.name=apache&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;output&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;...&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;- &lt;span style="color:#008000;font-weight:bold"&gt;rule&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;my_rule&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;append&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;true&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;condition&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;or proc.name=nginx&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Should &lt;code&gt;proc.name=nginx&lt;/code&gt; be interpreted as relative to the &lt;code&gt;and proc.name=apache&lt;/code&gt;, that is to allow either apache/nginx to open files, or relative to the &lt;code&gt;evt.type=open&lt;/code&gt;, that is to allow apache to open files or to allow nginx to do anything?&lt;/p&gt;
&lt;p&gt;In cases like this, be sure to scope the logical operators of the original condition with parentheses when possible, or avoid appending conditions when not possible.&lt;/p&gt;
&lt;h2 id="appending-to-existing-rules-using-append-key-deprecated"&gt;Appending to existing rules using &lt;code&gt;append&lt;/code&gt; key (deprecated)&lt;/h2&gt;
&lt;div class="card card-sm pageinfo pageinfo-warning my-4"&gt;
&lt;div class="card-body"&gt;
&lt;div class="card-text"&gt;
&lt;p&gt;The &lt;code&gt;append&lt;/code&gt; key has been deprecated and will be removed in Falco 1.0.0. Use the &lt;a href="https://v0-43--falcosecurity.netlify.app/docs/rules/overriding/#overview"&gt;&lt;code&gt;override&lt;/code&gt; section&lt;/a&gt; instead.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;If you use multiple Falco &lt;a class='glossary-tooltip' title='A Falco rules file is a YAML file containing three types of elements: rules, macros, and lists.' data-toggle='tooltip' data-placement='top' href='https://v0-43--falcosecurity.netlify.app/docs/rules' target='_blank' aria-label='rules files'&gt;rules files&lt;/a&gt;, you might want to append new items to an existing lists, macros or rules. To do that, define an item with the same name as an existing item and add an &lt;code&gt;append: true&lt;/code&gt; attribute to the YAML object.&lt;/p&gt;
&lt;div class="alert alert-warning" role="alert"&gt;
When appending to lists, items are automatically added to the &lt;strong&gt;end&lt;/strong&gt; of the &lt;em&gt;list&lt;/em&gt;.&lt;br&gt;
When appending to rules or macros, the additional content is appended to the &lt;a class='glossary-tooltip' title='Criteria to trigger an alert.' data-toggle='tooltip' data-placement='top' href='https://v0-43--falcosecurity.netlify.app/docs/rules/basic-elements/#conditions' target='_blank' aria-label='condition'&gt;condition&lt;/a&gt; field of the referred object.
&lt;/div&gt;
&lt;p&gt;Note that when appending to lists, rules or macros, the order of the rule configuration files matters! For example if you append to an existing default rule (e.g. &lt;code&gt;Terminal shell in container&lt;/code&gt;), you must ensure your custom configuration file (e.g. &lt;code&gt;/etc/falco/rules.d/custom-rules.yaml&lt;/code&gt;) is loaded &lt;strong&gt;after&lt;/strong&gt; the default configuration file (&lt;code&gt;/etc/falco/falco_rules.yaml&lt;/code&gt;).&lt;/p&gt;
&lt;p&gt;This can be configured with multiple &lt;code&gt;-r&lt;/code&gt; parameters in the right order, directly inside the Falco configuration file (&lt;code&gt;falco.yaml&lt;/code&gt;) via &lt;code&gt;rules_files&lt;/code&gt; or if you use the official Helm chart, via the &lt;code&gt;falco.rules_files&lt;/code&gt; value.&lt;/p&gt;
&lt;h2 id="redefining-existing-rules-using-append-key-deprecated"&gt;Redefining existing rules using &lt;code&gt;append&lt;/code&gt; key (deprecated)&lt;/h2&gt;
&lt;div class="card card-sm pageinfo pageinfo-warning my-4"&gt;
&lt;div class="card-body"&gt;
&lt;div class="card-text"&gt;
&lt;p&gt;The &lt;code&gt;append&lt;/code&gt; key has been deprecated and will be removed in Falco 1.0.0. Use the &lt;a href="https://v0-43--falcosecurity.netlify.app/docs/rules/overriding/#overview"&gt;&lt;code&gt;override&lt;/code&gt; section&lt;/a&gt; instead.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;If &lt;code&gt;append&lt;/code&gt; is set to &lt;code&gt;false&lt;/code&gt; (default value), the whole object will be redefined. This can be used to empty a list, &lt;a href="https://v0-43--falcosecurity.netlify.app/docs/reference/rules/macros-override/"&gt;apply user-specific settings to a macro&lt;/a&gt; or even change a rule completely.&lt;/p&gt;
&lt;p&gt;Take into account that when redefining a rule, it will entirely replace the previous rule, so if the new object defines fewer fields than required, Falco could return an error.&lt;/p&gt;
&lt;p&gt;The only exceptions to this are the &lt;code&gt;enabled&lt;/code&gt; field, that when defined as a single accompanying field, it simply enables or disables a previously-defined rule. And obviously, the &lt;code&gt;append&lt;/code&gt; field, that when set to &lt;code&gt;true&lt;/code&gt; for either macros or rules, it just appends the condition/exceptions field.&lt;/p&gt;
&lt;h2 id="examples-of-appending-using-append-key-deprecated"&gt;Examples of appending using &lt;code&gt;append&lt;/code&gt; key (deprecated)&lt;/h2&gt;
&lt;div class="card card-sm pageinfo pageinfo-warning my-4"&gt;
&lt;div class="card-body"&gt;
&lt;div class="card-text"&gt;
&lt;p&gt;The &lt;code&gt;append&lt;/code&gt; key has been deprecated and will be removed in Falco 1.0.0. Use the &lt;a href="https://v0-43--falcosecurity.netlify.app/docs/rules/overriding/#overview"&gt;&lt;code&gt;override&lt;/code&gt; section&lt;/a&gt; instead.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;In all the examples below, it's assumed one is running Falco via &lt;code&gt;falco -r /etc/falco/falco_rules.yaml -r /etc/falco/falco_rules.local.yaml&lt;/code&gt;, or has the default entries for &lt;code&gt;rules_files&lt;/code&gt; in falco.yaml, which has &lt;code&gt;/etc/falco/falco.yaml&lt;/code&gt; first and &lt;code&gt;/etc/falco/falco_rules.local.yaml&lt;/code&gt; second.&lt;/p&gt;
&lt;h3 id="appending-to-lists"&gt;Appending to Lists&lt;/h3&gt;
&lt;p&gt;Here's an example of appending to lists:&lt;/p&gt;
&lt;h5 id="etc-falco-falco-rules-yaml-6"&gt;&lt;code&gt;/etc/falco/falco_rules.yaml&lt;/code&gt;&lt;/h5&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;- &lt;span style="color:#008000;font-weight:bold"&gt;list&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;my_programs&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;items&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;[ls, cat, pwd]&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;- &lt;span style="color:#008000;font-weight:bold"&gt;rule&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;my_programs_opened_file&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;desc&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;Track whenever a set of programs opens a file&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;condition&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;proc.name in (my_programs) and (evt.type=open or evt.type=openat)&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;output&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;A tracked program opened a file | user=%user.name command=%proc.cmdline file=%fd.name&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;priority&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;INFO&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h5 id="etc-falco-falco-rules-local-yaml-4"&gt;&lt;code&gt;/etc/falco/falco_rules.local.yaml&lt;/code&gt;&lt;/h5&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;- &lt;span style="color:#008000;font-weight:bold"&gt;list&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;my_programs&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;append&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;true&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;items&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;[cp]&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The rule &lt;code&gt;my_programs_opened_file&lt;/code&gt; would trigger whenever any of &lt;code&gt;ls&lt;/code&gt;, &lt;code&gt;cat&lt;/code&gt;, &lt;code&gt;pwd&lt;/code&gt;, or &lt;code&gt;cp&lt;/code&gt; opened a file.&lt;/p&gt;
&lt;h3 id="appending-to-macros"&gt;Appending to Macros&lt;/h3&gt;
&lt;p&gt;Here's an example of appending to macros:&lt;/p&gt;
&lt;h5 id="etc-falco-falco-rules-yaml-7"&gt;&lt;code&gt;/etc/falco/falco_rules.yaml&lt;/code&gt;&lt;/h5&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;- &lt;span style="color:#008000;font-weight:bold"&gt;macro&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;access_file&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;condition&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;evt.type=open&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;- &lt;span style="color:#008000;font-weight:bold"&gt;rule&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;program_accesses_file&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;desc&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;Track whenever a set of programs opens a file&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;condition&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;proc.name in (cat, ls) and (access_file)&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;output&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;A tracked program opened a file | user=%user.name command=%proc.cmdline file=%fd.name&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;priority&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;INFO&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h5 id="etc-falco-falco-rules-local-yaml-5"&gt;&lt;code&gt;/etc/falco/falco_rules.local.yaml&lt;/code&gt;&lt;/h5&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;- &lt;span style="color:#008000;font-weight:bold"&gt;macro&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;access_file&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;append&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;true&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;condition&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;or evt.type=openat&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The rule &lt;code&gt;program_accesses_file&lt;/code&gt; would trigger when &lt;code&gt;ls&lt;/code&gt;/&lt;code&gt;cat&lt;/code&gt; either used &lt;code&gt;open&lt;/code&gt;/&lt;code&gt;openat&lt;/code&gt; on a file.&lt;/p&gt;
&lt;h3 id="appending-to-rules"&gt;Appending to Rules&lt;/h3&gt;
&lt;p&gt;Here's an example of appending to rules:&lt;/p&gt;
&lt;h5 id="etc-falco-falco-rules-yaml-8"&gt;&lt;code&gt;/etc/falco/falco_rules.yaml&lt;/code&gt;&lt;/h5&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;- &lt;span style="color:#008000;font-weight:bold"&gt;rule&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;program_accesses_file&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;desc&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;track whenever a set of programs opens a file&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;condition&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;proc.name in (cat, ls) and evt.type=open&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;output&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;A tracked program opened a file | user=%user.name command=%proc.cmdline file=%fd.name&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;priority&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;INFO&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h5 id="etc-falco-falco-rules-local-yaml-6"&gt;&lt;code&gt;/etc/falco/falco_rules.local.yaml&lt;/code&gt;&lt;/h5&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;- &lt;span style="color:#008000;font-weight:bold"&gt;rule&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;program_accesses_file&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;append&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;true&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;condition&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;and not user.name=root&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The rule &lt;code&gt;program_accesses_file&lt;/code&gt; would trigger when &lt;code&gt;ls&lt;/code&gt;/&lt;code&gt;cat&lt;/code&gt; either used &lt;code&gt;open&lt;/code&gt; on a file, but not if the user was root.&lt;/p&gt;
&lt;div class="alert alert-primary" role="alert"&gt;
&lt;h4 class="alert-heading"&gt;Append Exceptions to Rules&lt;/h4&gt;
It is also possible to append exceptions to rules.&lt;br&gt;
&lt;a href="https://v0-43--falcosecurity.netlify.app/docs/rules/exceptions/#appending-exception-values"&gt;Here&lt;/a&gt; you can find further information.
&lt;/div&gt;</description></item><item><title>Docs: Registered Plugins</title><link>https://v0-43--falcosecurity.netlify.app/docs/concepts/plugins/registered-plugins/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://v0-43--falcosecurity.netlify.app/docs/concepts/plugins/registered-plugins/</guid><description>
&lt;p&gt;You can find below the officially registered plugins, more details on &lt;a href="https://github.com/falcosecurity/plugins"&gt;https://github.com/falcosecurity/plugins&lt;/a&gt;.&lt;/p&gt;
&lt;style&gt;
.source {
background-color: #727d8d;
border: none;
color: #fff;
padding: 4px 5px;
border-radius: 5px;
}
&lt;/style&gt;
&lt;div class="table"&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;th scope="col"&gt;ID&lt;/th&gt;
&lt;th scope="col"&gt;Plugin&lt;/th&gt;
&lt;th scope="col"&gt;Type&lt;/th&gt;
&lt;th scope="col"&gt;Source&lt;/th&gt;
&lt;th scope="col"&gt;Description&lt;/th&gt;
&lt;th scope="col"&gt;Authors&lt;/th&gt;
&lt;th scope="col"&gt;URL&lt;/th&gt;
&lt;th scope="col"&gt;Rules URL&lt;/th&gt;
&lt;th scope="col"&gt;Licence&lt;/th&gt;
&lt;/thead&gt;
&lt;tr&gt;
&lt;td&gt;
1
&lt;/td&gt;
&lt;td&gt; &lt;b&gt;k8saudit&lt;/b&gt; &lt;/td&gt;
&lt;td&gt; sourcing &lt;/td&gt;
&lt;td&gt; &lt;span class="source"&gt; k8s_audit &lt;/span&gt; &lt;/td&gt;
&lt;td&gt; Read Kubernetes Audit Events and monitor Kubernetes Clusters &lt;/td&gt;
&lt;td&gt; &lt;a href="https://falco.org/community"&gt;The Falco Authors&lt;/a&gt; &lt;/td&gt;
&lt;td&gt; &lt;a href="https://github.com/falcosecurity/plugins/tree/main/plugins/k8saudit"&gt;🔗&lt;/a&gt; &lt;/td&gt;
&lt;td&gt; &lt;a href="https://github.com/falcosecurity/plugins/tree/main/plugins/k8saudit/rules"&gt;🔗 &lt;/td&gt;
&lt;td&gt; Apache-2.0 &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
2
&lt;/td&gt;
&lt;td&gt; &lt;b&gt;cloudtrail&lt;/b&gt; &lt;/td&gt;
&lt;td&gt; sourcing &lt;/td&gt;
&lt;td&gt; &lt;span class="source"&gt; aws_cloudtrail &lt;/span&gt; &lt;/td&gt;
&lt;td&gt; Reads Cloudtrail JSON logs from files/S3 and injects as events &lt;/td&gt;
&lt;td&gt; &lt;a href="https://falco.org/community"&gt;The Falco Authors&lt;/a&gt; &lt;/td&gt;
&lt;td&gt; &lt;a href="https://github.com/falcosecurity/plugins/tree/main/plugins/cloudtrail"&gt;🔗&lt;/a&gt; &lt;/td&gt;
&lt;td&gt; &lt;a href="https://github.com/falcosecurity/plugins/tree/main/plugins/cloudtrail/rules"&gt;🔗 &lt;/td&gt;
&lt;td&gt; Apache-2.0 &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
-
&lt;/td&gt;
&lt;td&gt; &lt;b&gt;json&lt;/b&gt; &lt;/td&gt;
&lt;td&gt; extraction &lt;/td&gt;
&lt;td&gt; &lt;/span&gt; &lt;/td&gt;
&lt;td&gt; Extract values from any JSON payload &lt;/td&gt;
&lt;td&gt; &lt;a href="https://falco.org/community"&gt;The Falco Authors&lt;/a&gt; &lt;/td&gt;
&lt;td&gt; &lt;a href="https://github.com/falcosecurity/plugins/tree/main/plugins/json"&gt;🔗&lt;/a&gt; &lt;/td&gt;
&lt;td&gt; &lt;/td&gt;
&lt;td&gt; Apache-2.0 &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
3
&lt;/td&gt;
&lt;td&gt; &lt;b&gt;dummy&lt;/b&gt; &lt;/td&gt;
&lt;td&gt; sourcing &lt;/td&gt;
&lt;td&gt; &lt;span class="source"&gt; dummy &lt;/span&gt; &lt;/td&gt;
&lt;td&gt; Reference plugin used to document interface &lt;/td&gt;
&lt;td&gt; &lt;a href="https://falco.org/community"&gt;The Falco Authors&lt;/a&gt; &lt;/td&gt;
&lt;td&gt; &lt;a href="https://github.com/falcosecurity/plugins/tree/main/plugins/dummy"&gt;🔗&lt;/a&gt; &lt;/td&gt;
&lt;td&gt; &lt;/td&gt;
&lt;td&gt; Apache-2.0 &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
4
&lt;/td&gt;
&lt;td&gt; &lt;b&gt;dummy_c&lt;/b&gt; &lt;/td&gt;
&lt;td&gt; sourcing &lt;/td&gt;
&lt;td&gt; &lt;span class="source"&gt; dummy_c &lt;/span&gt; &lt;/td&gt;
&lt;td&gt; Like dummy, but written in C&amp;#43;&amp;#43; &lt;/td&gt;
&lt;td&gt; &lt;a href="https://falco.org/community"&gt;The Falco Authors&lt;/a&gt; &lt;/td&gt;
&lt;td&gt; &lt;a href="https://github.com/falcosecurity/plugins/tree/main/plugins/dummy_c"&gt;🔗&lt;/a&gt; &lt;/td&gt;
&lt;td&gt; &lt;/td&gt;
&lt;td&gt; Apache-2.0 &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
5
&lt;/td&gt;
&lt;td&gt; &lt;b&gt;docker&lt;/b&gt; &lt;/td&gt;
&lt;td&gt; sourcing &lt;/td&gt;
&lt;td&gt; &lt;span class="source"&gt; docker &lt;/span&gt; &lt;/td&gt;
&lt;td&gt; Docker Events &lt;/td&gt;
&lt;td&gt; &lt;a href="https://github.com/Issif"&gt;Thomas Labarussias&lt;/a&gt; &lt;/td&gt;
&lt;td&gt; &lt;a href="https://github.com/Issif/docker-plugin"&gt;🔗&lt;/a&gt; &lt;/td&gt;
&lt;td&gt; &lt;a href="https://github.com/Issif/docker-plugin/tree/main/rules"&gt;🔗 &lt;/td&gt;
&lt;td&gt; Apache-2.0 &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
6
&lt;/td&gt;
&lt;td&gt; &lt;b&gt;seccompagent&lt;/b&gt; &lt;/td&gt;
&lt;td&gt; sourcing &lt;/td&gt;
&lt;td&gt; &lt;span class="source"&gt; seccompagent &lt;/span&gt; &lt;/td&gt;
&lt;td&gt; Seccomp Agent Events &lt;/td&gt;
&lt;td&gt; &lt;a href="https://github.com/kinvolk/seccompagent"&gt;Alban Crequy&lt;/a&gt; &lt;/td&gt;
&lt;td&gt; &lt;a href="https://github.com/kinvolk/seccompagent"&gt;🔗&lt;/a&gt; &lt;/td&gt;
&lt;td&gt; &lt;/td&gt;
&lt;td&gt; Apache-2.0 &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
7
&lt;/td&gt;
&lt;td&gt; &lt;b&gt;okta&lt;/b&gt; &lt;/td&gt;
&lt;td&gt; sourcing &lt;/td&gt;
&lt;td&gt; &lt;span class="source"&gt; okta &lt;/span&gt; &lt;/td&gt;
&lt;td&gt; Okta Log Events &lt;/td&gt;
&lt;td&gt; &lt;a href="https://falco.org/community"&gt;The Falco Authors&lt;/a&gt; &lt;/td&gt;
&lt;td&gt; &lt;a href="https://github.com/falcosecurity/plugins/tree/main/plugins/okta"&gt;🔗&lt;/a&gt; &lt;/td&gt;
&lt;td&gt; &lt;a href="https://github.com/falcosecurity/plugins/tree/main/plugins/okta/rules"&gt;🔗 &lt;/td&gt;
&lt;td&gt; Apache-2.0 &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
8
&lt;/td&gt;
&lt;td&gt; &lt;b&gt;github&lt;/b&gt; &lt;/td&gt;
&lt;td&gt; sourcing &lt;/td&gt;
&lt;td&gt; &lt;span class="source"&gt; github &lt;/span&gt; &lt;/td&gt;
&lt;td&gt; Github Webhook Events &lt;/td&gt;
&lt;td&gt; &lt;a href="https://falco.org/community"&gt;The Falco Authors&lt;/a&gt; &lt;/td&gt;
&lt;td&gt; &lt;a href="https://github.com/falcosecurity/plugins/tree/main/plugins/github"&gt;🔗&lt;/a&gt; &lt;/td&gt;
&lt;td&gt; &lt;a href="https://github.com/falcosecurity/plugins/tree/main/plugins/github/rules"&gt;🔗 &lt;/td&gt;
&lt;td&gt; Apache-2.0 &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
9
&lt;/td&gt;
&lt;td&gt; &lt;b&gt;k8saudit-eks&lt;/b&gt; &lt;/td&gt;
&lt;td&gt; sourcing &lt;/td&gt;
&lt;td&gt; &lt;span class="source"&gt; k8s_audit &lt;/span&gt; &lt;/td&gt;
&lt;td&gt; Read Kubernetes Audit Events from AWS EKS Clusters &lt;/td&gt;
&lt;td&gt; &lt;a href="https://falco.org/community"&gt;The Falco Authors&lt;/a&gt; &lt;/td&gt;
&lt;td&gt; &lt;a href="https://github.com/falcosecurity/plugins/tree/main/plugins/k8saudit-eks"&gt;🔗&lt;/a&gt; &lt;/td&gt;
&lt;td&gt; &lt;a href="https://github.com/falcosecurity/plugins/tree/main/plugins/k8saudit/rules"&gt;🔗 &lt;/td&gt;
&lt;td&gt; Apache-2.0 &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
10
&lt;/td&gt;
&lt;td&gt; &lt;b&gt;nomad&lt;/b&gt; &lt;/td&gt;
&lt;td&gt; sourcing &lt;/td&gt;
&lt;td&gt; &lt;span class="source"&gt; nomad &lt;/span&gt; &lt;/td&gt;
&lt;td&gt; Read Hashicorp Nomad Events Stream &lt;/td&gt;
&lt;td&gt; &lt;a href="https://github.com/albertollamaso/nomad-plugin/issues"&gt;Alberto Llamas&lt;/a&gt; &lt;/td&gt;
&lt;td&gt; &lt;a href="https://github.com/albertollamaso/nomad-plugin/tree/main"&gt;🔗&lt;/a&gt; &lt;/td&gt;
&lt;td&gt; &lt;a href="https://github.com/albertollamaso/nomad-plugin/tree/main/rules"&gt;🔗 &lt;/td&gt;
&lt;td&gt; Apache-2.0 &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
11
&lt;/td&gt;
&lt;td&gt; &lt;b&gt;dnscollector&lt;/b&gt; &lt;/td&gt;
&lt;td&gt; sourcing &lt;/td&gt;
&lt;td&gt; &lt;span class="source"&gt; dnscollector &lt;/span&gt; &lt;/td&gt;
&lt;td&gt; DNS Collector Events &lt;/td&gt;
&lt;td&gt; &lt;a href="https://github.com/SysdigDan/dnscollector-falco-plugin/issues"&gt;Daniel Moloney&lt;/a&gt; &lt;/td&gt;
&lt;td&gt; &lt;a href="https://github.com/SysdigDan/dnscollector-falco-plugin"&gt;🔗&lt;/a&gt; &lt;/td&gt;
&lt;td&gt; &lt;a href="https://github.com/SysdigDan/dnscollector-falco-plugin/tree/master/rules"&gt;🔗 &lt;/td&gt;
&lt;td&gt; Apache-2.0 &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
12
&lt;/td&gt;
&lt;td&gt; &lt;b&gt;gcpaudit&lt;/b&gt; &lt;/td&gt;
&lt;td&gt; sourcing &lt;/td&gt;
&lt;td&gt; &lt;span class="source"&gt; gcp_auditlog &lt;/span&gt; &lt;/td&gt;
&lt;td&gt; Read GCP Audit Logs &lt;/td&gt;
&lt;td&gt; &lt;a href="https://falco.org/community"&gt;The Falco Authors&lt;/a&gt; &lt;/td&gt;
&lt;td&gt; &lt;a href="https://github.com/falcosecurity/plugins/tree/main/plugins/gcpaudit"&gt;🔗&lt;/a&gt; &lt;/td&gt;
&lt;td&gt; &lt;a href="https://github.com/falcosecurity/plugins/tree/main/plugins/gcpaudit/rules"&gt;🔗 &lt;/td&gt;
&lt;td&gt; Apache-2.0 &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
13
&lt;/td&gt;
&lt;td&gt; &lt;b&gt;syslogsrv&lt;/b&gt; &lt;/td&gt;
&lt;td&gt; sourcing &lt;/td&gt;
&lt;td&gt; &lt;span class="source"&gt; syslogsrv &lt;/span&gt; &lt;/td&gt;
&lt;td&gt; Syslog Server Events &lt;/td&gt;
&lt;td&gt; &lt;a href="https://github.com/nabokihms/syslogsrv-falco-plugin/issues"&gt;Maksim Nabokikh&lt;/a&gt; &lt;/td&gt;
&lt;td&gt; &lt;a href="https://github.com/nabokihms/syslogsrv-falco-plugin/tree/main/plugins/syslogsrv"&gt;🔗&lt;/a&gt; &lt;/td&gt;
&lt;td&gt; &lt;a href="https://github.com/nabokihms/syslogsrv-falco-plugin/tree/main/rules"&gt;🔗 &lt;/td&gt;
&lt;td&gt; Apache-2.0 &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
14
&lt;/td&gt;
&lt;td&gt; &lt;b&gt;salesforce&lt;/b&gt; &lt;/td&gt;
&lt;td&gt; sourcing &lt;/td&gt;
&lt;td&gt; &lt;span class="source"&gt; salesforce &lt;/span&gt; &lt;/td&gt;
&lt;td&gt; Falco plugin providing basic runtime threat detection and auditing logging for Salesforce &lt;/td&gt;
&lt;td&gt; &lt;a href="https://github.com/an1245/falco-plugin-salesforce/issues"&gt;Andy&lt;/a&gt; &lt;/td&gt;
&lt;td&gt; &lt;a href="https://github.com/an1245/falco-plugin-salesforce/"&gt;🔗&lt;/a&gt; &lt;/td&gt;
&lt;td&gt; &lt;a href="https://github.com/an1245/falco-plugin-salesforce/tree/main/rules"&gt;🔗 &lt;/td&gt;
&lt;td&gt; Apache-2.0 &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
15
&lt;/td&gt;
&lt;td&gt; &lt;b&gt;box&lt;/b&gt; &lt;/td&gt;
&lt;td&gt; sourcing &lt;/td&gt;
&lt;td&gt; &lt;span class="source"&gt; box &lt;/span&gt; &lt;/td&gt;
&lt;td&gt; Falco plugin providing basic runtime threat detection and auditing logging for Box &lt;/td&gt;
&lt;td&gt; &lt;a href="https://github.com/an1245/falco-plugin-box/issues"&gt;Andy&lt;/a&gt; &lt;/td&gt;
&lt;td&gt; &lt;a href="https://github.com/an1245/falco-plugin-box/"&gt;🔗&lt;/a&gt; &lt;/td&gt;
&lt;td&gt; &lt;a href="https://github.com/an1245/falco-plugin-box/tree/main/rules"&gt;🔗 &lt;/td&gt;
&lt;td&gt; Apache-2.0 &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
-
&lt;/td&gt;
&lt;td&gt; &lt;b&gt;k8smeta&lt;/b&gt; &lt;/td&gt;
&lt;td&gt; extraction &lt;/td&gt;
&lt;td&gt; &lt;/span&gt; &lt;/td&gt;
&lt;td&gt; Enriche Falco syscall flow with Kubernetes Metadata &lt;/td&gt;
&lt;td&gt; &lt;a href="https://falco.org/community"&gt;The Falco Authors&lt;/a&gt; &lt;/td&gt;
&lt;td&gt; &lt;a href="https://github.com/falcosecurity/plugins/tree/main/plugins/k8smeta"&gt;🔗&lt;/a&gt; &lt;/td&gt;
&lt;td&gt; &lt;/td&gt;
&lt;td&gt; Apache-2.0 &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
16
&lt;/td&gt;
&lt;td&gt; &lt;b&gt;k8saudit-gke&lt;/b&gt; &lt;/td&gt;
&lt;td&gt; sourcing &lt;/td&gt;
&lt;td&gt; &lt;span class="source"&gt; k8s_audit &lt;/span&gt; &lt;/td&gt;
&lt;td&gt; Read Kubernetes Audit Events from GKE Clusters &lt;/td&gt;
&lt;td&gt; &lt;a href="https://falco.org/community"&gt;The Falco Authors&lt;/a&gt; &lt;/td&gt;
&lt;td&gt; &lt;a href="https://github.com/falcosecurity/plugins/tree/main/plugins/k8saudit-gke"&gt;🔗&lt;/a&gt; &lt;/td&gt;
&lt;td&gt; &lt;a href="https://github.com/falcosecurity/plugins/tree/main/plugins/k8saudit-gke/rules"&gt;🔗 &lt;/td&gt;
&lt;td&gt; Apache-2.0 &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
17
&lt;/td&gt;
&lt;td&gt; &lt;b&gt;journald&lt;/b&gt; &lt;/td&gt;
&lt;td&gt; sourcing &lt;/td&gt;
&lt;td&gt; &lt;span class="source"&gt; journal &lt;/span&gt; &lt;/td&gt;
&lt;td&gt; Read Journald events into Falco &lt;/td&gt;
&lt;td&gt; &lt;a href="https://github.com/gnosek/falco-journald-plugin"&gt;Grzegorz Nosek&lt;/a&gt; &lt;/td&gt;
&lt;td&gt; &lt;a href="https://github.com/gnosek/falco-journald-plugin"&gt;🔗&lt;/a&gt; &lt;/td&gt;
&lt;td&gt; &lt;/td&gt;
&lt;td&gt; Apache-2.0 &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
18
&lt;/td&gt;
&lt;td&gt; &lt;b&gt;kafka&lt;/b&gt; &lt;/td&gt;
&lt;td&gt; sourcing &lt;/td&gt;
&lt;td&gt; &lt;span class="source"&gt; kafka &lt;/span&gt; &lt;/td&gt;
&lt;td&gt; Read events from Kafka topics into Falco &lt;/td&gt;
&lt;td&gt; &lt;a href="https://falco.org/community"&gt;Hunter Madison&lt;/a&gt; &lt;/td&gt;
&lt;td&gt; &lt;a href="https://github.com/falcosecurity/plugins/tree/main/plugins/kafka"&gt;🔗&lt;/a&gt; &lt;/td&gt;
&lt;td&gt; &lt;a href="https://github.com/falcosecurity/plugins/tree/main/plugins/kafka/rules"&gt;🔗 &lt;/td&gt;
&lt;td&gt; Apache-2.0 &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
19
&lt;/td&gt;
&lt;td&gt; &lt;b&gt;gitlab&lt;/b&gt; &lt;/td&gt;
&lt;td&gt; sourcing &lt;/td&gt;
&lt;td&gt; &lt;span class="source"&gt; gitlab &lt;/span&gt; &lt;/td&gt;
&lt;td&gt; Falco plugin providing basic runtime threat detection and auditing logging for GitLab &lt;/td&gt;
&lt;td&gt; &lt;a href="https://github.com/an1245/falco-plugin-gitlab/issues"&gt;Andy&lt;/a&gt; &lt;/td&gt;
&lt;td&gt; &lt;a href="https://github.com/an1245/falco-plugin-gitlab"&gt;🔗&lt;/a&gt; &lt;/td&gt;
&lt;td&gt; &lt;a href="https://github.com/an1245/falco-plugin-gitlab/tree/main/rules"&gt;🔗 &lt;/td&gt;
&lt;td&gt; Apache-2.0 &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
20
&lt;/td&gt;
&lt;td&gt; &lt;b&gt;keycloak&lt;/b&gt; &lt;/td&gt;
&lt;td&gt; sourcing &lt;/td&gt;
&lt;td&gt; &lt;span class="source"&gt; keycloak &lt;/span&gt; &lt;/td&gt;
&lt;td&gt; Falco plugin for sourcing and extracting Keycloak user/admin events &lt;/td&gt;
&lt;td&gt; &lt;a href="https://github.com/mattiaforc/falco-keycloak-plugin/issues"&gt;Mattia Forcellese&lt;/a&gt; &lt;/td&gt;
&lt;td&gt; &lt;a href="https://github.com/mattiaforc/falco-keycloak-plugin"&gt;🔗&lt;/a&gt; &lt;/td&gt;
&lt;td&gt; &lt;a href="https://github.com/mattiaforc/falco-keycloak-plugin/tree/main/rules"&gt;🔗 &lt;/td&gt;
&lt;td&gt; Apache-2.0 &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
21
&lt;/td&gt;
&lt;td&gt; &lt;b&gt;k8saudit-aks&lt;/b&gt; &lt;/td&gt;
&lt;td&gt; sourcing &lt;/td&gt;
&lt;td&gt; &lt;span class="source"&gt; k8s_audit &lt;/span&gt; &lt;/td&gt;
&lt;td&gt; Read Kubernetes Audit Events from Azure AKS Clusters &lt;/td&gt;
&lt;td&gt; &lt;a href="https://falco.org/community"&gt;The Falco Authors&lt;/a&gt; &lt;/td&gt;
&lt;td&gt; &lt;a href="https://github.com/falcosecurity/plugins/tree/main/plugins/k8saudit-aks"&gt;🔗&lt;/a&gt; &lt;/td&gt;
&lt;td&gt; &lt;a href="https://github.com/falcosecurity/plugins/tree/main/plugins/k8saudit/rules"&gt;🔗 &lt;/td&gt;
&lt;td&gt; Apache-2.0 &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
22
&lt;/td&gt;
&lt;td&gt; &lt;b&gt;k8saudit-ovh&lt;/b&gt; &lt;/td&gt;
&lt;td&gt; sourcing &lt;/td&gt;
&lt;td&gt; &lt;span class="source"&gt; k8s_audit &lt;/span&gt; &lt;/td&gt;
&lt;td&gt; Read Kubernetes Audit Events from OVHcloud MKS Clusters &lt;/td&gt;
&lt;td&gt; &lt;a href="https://falco.org/community"&gt;Aurélie Vache&lt;/a&gt; &lt;/td&gt;
&lt;td&gt; &lt;a href="https://github.com/falcosecurity/plugins/tree/main/plugins/k8saudit-ovh"&gt;🔗&lt;/a&gt; &lt;/td&gt;
&lt;td&gt; &lt;a href="https://github.com/falcosecurity/plugins/tree/main/plugins/k8saudit/rules"&gt;🔗 &lt;/td&gt;
&lt;td&gt; Apache-2.0 &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
23
&lt;/td&gt;
&lt;td&gt; &lt;b&gt;dummy_rs&lt;/b&gt; &lt;/td&gt;
&lt;td&gt; sourcing &lt;/td&gt;
&lt;td&gt; &lt;span class="source"&gt; dummy_rs &lt;/span&gt; &lt;/td&gt;
&lt;td&gt; Like dummy, but written in Rust &lt;/td&gt;
&lt;td&gt; &lt;a href="https://falco.org/community"&gt;The Falco Authors&lt;/a&gt; &lt;/td&gt;
&lt;td&gt; &lt;a href="https://github.com/falcosecurity/plugins/tree/main/plugins/dummy_rs"&gt;🔗&lt;/a&gt; &lt;/td&gt;
&lt;td&gt; &lt;/td&gt;
&lt;td&gt; Apache-2.0 &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
-
&lt;/td&gt;
&lt;td&gt; &lt;b&gt;container&lt;/b&gt; &lt;/td&gt;
&lt;td&gt; extraction &lt;/td&gt;
&lt;td&gt; &lt;/span&gt; &lt;/td&gt;
&lt;td&gt; Enriche Falco syscall flow with Container Metadata &lt;/td&gt;
&lt;td&gt; &lt;a href="https://falco.org/community"&gt;The Falco Authors&lt;/a&gt; &lt;/td&gt;
&lt;td&gt; &lt;a href="https://github.com/falcosecurity/plugins/tree/main/plugins/container"&gt;🔗&lt;/a&gt; &lt;/td&gt;
&lt;td&gt; &lt;/td&gt;
&lt;td&gt; Apache-2.0 &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
-
&lt;/td&gt;
&lt;td&gt; &lt;b&gt;krsi&lt;/b&gt; &lt;/td&gt;
&lt;td&gt; extraction &lt;/td&gt;
&lt;td&gt; &lt;/span&gt; &lt;/td&gt;
&lt;td&gt; Security (KRSI) events support for Falco &lt;/td&gt;
&lt;td&gt; &lt;a href="https://falco.org/community"&gt;The Falco Authors&lt;/a&gt; &lt;/td&gt;
&lt;td&gt; &lt;a href="https://github.com/falcosecurity/plugins/tree/main/plugins/krsi"&gt;🔗&lt;/a&gt; &lt;/td&gt;
&lt;td&gt; &lt;/td&gt;
&lt;td&gt; Apache-2.0 &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
24
&lt;/td&gt;
&lt;td&gt; &lt;b&gt;collector&lt;/b&gt; &lt;/td&gt;
&lt;td&gt; sourcing &lt;/td&gt;
&lt;td&gt; &lt;span class="source"&gt; collector &lt;/span&gt; &lt;/td&gt;
&lt;td&gt; Generic collector to ingest raw payloads into Falco &lt;/td&gt;
&lt;td&gt; &lt;a href="https://falco.org/community"&gt;The Falco Authors&lt;/a&gt; &lt;/td&gt;
&lt;td&gt; &lt;a href="https://github.com/falcosecurity/plugins/tree/main/plugins/collector"&gt;🔗&lt;/a&gt; &lt;/td&gt;
&lt;td&gt; &lt;/td&gt;
&lt;td&gt; Apache-2.0 &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
25
&lt;/td&gt;
&lt;td&gt; &lt;b&gt;awselb&lt;/b&gt; &lt;/td&gt;
&lt;td&gt; sourcing &lt;/td&gt;
&lt;td&gt; &lt;span class="source"&gt; awselb &lt;/span&gt; &lt;/td&gt;
&lt;td&gt; AWS Elastic Load Balancer access logs events &lt;/td&gt;
&lt;td&gt; &lt;a href="https://github.com/yukinakanaka/falco-plugin-aws-elb/issues"&gt;Yuki Nakamura&lt;/a&gt; &lt;/td&gt;
&lt;td&gt; &lt;a href="https://github.com/yukinakanaka/falco-plugin-aws-elb"&gt;🔗&lt;/a&gt; &lt;/td&gt;
&lt;td&gt; &lt;a href="https://github.com/yukinakanaka/falco-plugin-aws-elb/tree/main/rules"&gt;🔗 &lt;/td&gt;
&lt;td&gt; Apache-2.0 &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
26
&lt;/td&gt;
&lt;td&gt; &lt;b&gt;edera&lt;/b&gt; &lt;/td&gt;
&lt;td&gt; sourcing &lt;/td&gt;
&lt;td&gt; &lt;span class="source"&gt; edera_zone &lt;/span&gt; &lt;/td&gt;
&lt;td&gt; A Falco plugin for forwarding libscap events out of Edera zones. &lt;/td&gt;
&lt;td&gt; &lt;a href="contact@edera.dev"&gt;Edera&lt;/a&gt; &lt;/td&gt;
&lt;td&gt; &lt;a href="https://github.com/edera-dev/falco_plugin/"&gt;🔗&lt;/a&gt; &lt;/td&gt;
&lt;td&gt; &lt;a href="https://docs.edera.dev/guides/observability/falco-integration/"&gt;🔗 &lt;/td&gt;
&lt;td&gt; Apache-2.0 &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
27
&lt;/td&gt;
&lt;td&gt; &lt;b&gt;nginx&lt;/b&gt; &lt;/td&gt;
&lt;td&gt; sourcing &lt;/td&gt;
&lt;td&gt; &lt;span class="source"&gt; nginx &lt;/span&gt; &lt;/td&gt;
&lt;td&gt; Real-time nginx access log monitoring for security threats.
Detects SQL injection, XSS, path traversal, command injection,
brute force attacks, and OWASP Top 10 vulnerabilities.
&lt;/td&gt;
&lt;td&gt; &lt;a href="https://github.com/takaosgb3/falco-plugin-nginx/issues"&gt;takaosgb3&lt;/a&gt; &lt;/td&gt;
&lt;td&gt; &lt;a href="https://github.com/takaosgb3/falco-plugin-nginx"&gt;🔗&lt;/a&gt; &lt;/td&gt;
&lt;td&gt; &lt;a href="https://github.com/takaosgb3/falco-plugin-nginx/tree/main/rules"&gt;🔗 &lt;/td&gt;
&lt;td&gt; Apache-2.0 &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
28
&lt;/td&gt;
&lt;td&gt; &lt;b&gt;coding_agent&lt;/b&gt; &lt;/td&gt;
&lt;td&gt; sourcing &lt;/td&gt;
&lt;td&gt; &lt;span class="source"&gt; coding_agent &lt;/span&gt; &lt;/td&gt;
&lt;td&gt; Runtime detection for AI coding agents with Falco (part of the Prempti
project). Intercepts tool calls (shell commands, file operations, web
fetches, MCP calls) before they run and produces allow/deny/ask
verdicts via customizable Falco rules, with a full audit trail of
agent activity.
&lt;/td&gt;
&lt;td&gt; &lt;a href="https://github.com/falcosecurity/prempti"&gt;The Falco Authors&lt;/a&gt; &lt;/td&gt;
&lt;td&gt; &lt;a href="https://github.com/falcosecurity/prempti/tree/main/plugins/coding-agents-plugin"&gt;🔗&lt;/a&gt; &lt;/td&gt;
&lt;td&gt; &lt;a href="https://github.com/falcosecurity/prempti/tree/main/rules"&gt;🔗 &lt;/td&gt;
&lt;td&gt; Apache-2.0 &lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;
&lt;/div&gt;</description></item><item><title>Docs: Actions For Dropped System Call Events</title><link>https://v0-43--falcosecurity.netlify.app/docs/concepts/event-sources/kernel/dropped-events/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://v0-43--falcosecurity.netlify.app/docs/concepts/event-sources/kernel/dropped-events/</guid><description>
&lt;h2 id="introduction"&gt;Introduction&lt;/h2&gt;
&lt;p&gt;With the enhancements introduced in v0.15.0, Falco can now intelligently detect dropped &lt;a class='glossary-tooltip' title='Syscalls stands for system calls, a way to request a service from the running kernel.' data-toggle='tooltip' data-placement='top' href='https://man7.org/linux/man-pages/man2/syscalls.2.html' target='_blank' aria-label='system call'&gt;system call&lt;/a&gt; events and take remedial actions, such as alerting or even exiting Falco entirely. When system call events are dropped, Falco might encounter problems building its internal view of the processes, files, containers, and orchestrator metadata in use, which in turn might affect the rules that depend on that metadata. The explicit signals that Falco now provides make it easier to detect dropped system calls.&lt;/p&gt;
&lt;p&gt;For more information on this feature, see our blog post on &lt;a href="https://sysdig.com/blog/cve-2019-8339-falco-vulnerability/"&gt;CVE-2019-8339&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id="implementation"&gt;Implementation&lt;/h2&gt;
&lt;p&gt;Every second, Falco reads system call event counts that are populated by the &lt;a class='glossary-tooltip' title='Used to describe the .ko object that would be loaded into the kernel as a potentially risky kernel module.' data-toggle='tooltip' data-placement='top' href='https://linux-kernel-labs.github.io/refs/heads/master/labs/kernel_modules.html' target='_blank' aria-label='kernel module'&gt;kernel module&lt;/a&gt;/&lt;a class='glossary-tooltip' title='eBPF is a technology to collect metrics and events from the Kernel in a secure way.' data-toggle='tooltip' data-placement='top' href='https://v0-43--falcosecurity.netlify.app/docs/concepts/event-sources/kernel/#legacy-ebpf-probe' target='_blank' aria-label='eBPF'&gt;eBPF&lt;/a&gt; program. The reading includes the number of system calls processed, and most importantly, the number of times the kernel tried to write system call information to the shared buffer between the kernel and user space, but found the buffer was full. These failed write attempts are considered &lt;em&gt;dropped&lt;/em&gt; system call events.&lt;/p&gt;
&lt;p&gt;When at least one dropped event is detected, Falco takes one of the following actions:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;ignore&lt;/code&gt;: no action is taken. If an empty list is provided, ignore is assumed.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;log&lt;/code&gt;: log a CRITICAL message noting that the buffer was full.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;alert&lt;/code&gt;: emit a Falco alert stating that the buffer was full.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;exit&lt;/code&gt;: exit Falco with a non-zero rc.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Given below are a sample log message, an alert, and an exit message:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;Wed Mar 27 15:28:22 2019: Falco initialized with configuration file /etc/falco/falco.yaml
Wed Mar 27 15:28:22 2019: Loading rules from file /etc/falco/falco_rules.yaml:
Wed Mar 27 15:28:24 2019: Falco internal: syscall event drop. 1 system calls dropped in last second.
15:28:24.000207862: Critical Falco internal: syscall event drop. 1 system calls dropped in last second.(n_drops=1 n_evts=1181)
Wed Mar 27 15:28:24 2019: Falco internal: syscall event drop. 1 system calls dropped in last second.
Wed Mar 27 15:28:24 2019: Exiting.
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id="actions-rate-throttling"&gt;Actions Rate Throttling&lt;/h2&gt;
&lt;p&gt;To reduce the likelihood of a flood of log messages/alerts, Falco provides an alert throttling mechanism disabled by default. This feature can be enabled through the &lt;a href="https://v0-43--falcosecurity.netlify.app/docs/reference/daemon/config-options/"&gt;Falco configuration&lt;/a&gt; (see the &lt;code&gt;outputs&lt;/code&gt; entry).&lt;/p&gt;
&lt;div class="alert alert-primary" role="alert"&gt;
Before &lt;a href="https://v0-43--falcosecurity.netlify.app/blog/falco-0-33-0/"&gt;v0.33.0&lt;/a&gt; this feature was enabled by default.
&lt;/div&gt;
&lt;h2 id="configuration"&gt;Configuration&lt;/h2&gt;
&lt;p&gt;The actions to take on a dropped system call event and the throttling parameters for the token bucket are configurable in the file &lt;code&gt;falco.yaml&lt;/code&gt;. You can find them in &lt;a href="https://v0-43--falcosecurity.netlify.app/docs/reference/daemon/config-options/"&gt;syscall_event_drops&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>Docs: Supported Fields for Conditions and Outputs</title><link>https://v0-43--falcosecurity.netlify.app/docs/reference/rules/supported-fields/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://v0-43--falcosecurity.netlify.app/docs/reference/rules/supported-fields/</guid><description>
&lt;p&gt;Here are the fields supported by Falco. These fields can be used in the &lt;code&gt;condition&lt;/code&gt; key of a Falco rule and well as the &lt;code&gt;output&lt;/code&gt; key. Any fields included in the &lt;code&gt;output&lt;/code&gt; key of a rule will also be included in the alert's &lt;code&gt;output_fields&lt;/code&gt; object when &lt;code&gt;json_output&lt;/code&gt; is set to &lt;code&gt;true&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;You can also see this set of fields via &lt;code&gt;falco --list=&amp;lt;source&amp;gt;&lt;/code&gt;, with &lt;code&gt;&amp;lt;source&amp;gt;&lt;/code&gt; being one of the &lt;a href="https://v0-43--falcosecurity.netlify.app/docs/concepts/event-sources/"&gt;Falco event sources&lt;/a&gt;.&lt;/p&gt;
&lt;h3 id="system-calls-source-syscall"&gt;System Calls (source &lt;code&gt;syscall&lt;/code&gt;)&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;syscall&lt;/code&gt; event source fields are provided by the &lt;a href="https://v0-43--falcosecurity.netlify.app/docs/concepts/event-sources/kernel/"&gt;Falco Drivers&lt;/a&gt;. See the &lt;a href="https://v0-43--falcosecurity.netlify.app/docs/reference/rules/supported-events/"&gt;supported events&lt;/a&gt; documentation to learn about all the available event types. The field &lt;code&gt;evt.arg&lt;/code&gt;, &lt;code&gt;evt.args&lt;/code&gt; and &lt;code&gt;evt.rawarg&lt;/code&gt; is used to access arguments for each event. For example, in order to access the &lt;code&gt;target&lt;/code&gt; arg of a &lt;code&gt;symlinkat&lt;/code&gt; exit event you can use &lt;code&gt;evt.arg.target&lt;/code&gt;.&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;# System Kernel Fields
$ falco --list=syscall
&lt;/code&gt;&lt;/pre&gt;&lt;!--
generated with:
falco --list=syscall --markdown | sed -E 's/## Field Class/### Field Class/g' | awk '!/^Event Sources: syscall\w*/' | awk '/Field Class: evt/{c++;if(c==2){sub("evt","evt (for system calls)");c=0}}1'
--&gt;
&lt;h3 id="field-class-evt"&gt;Field Class: evt&lt;/h3&gt;
&lt;p&gt;These fields can be used for all event types&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style="text-align: left"&gt;Name&lt;/th&gt;
&lt;th style="text-align: left"&gt;Type&lt;/th&gt;
&lt;th style="text-align: left"&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;evt.num&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;UINT64&lt;/td&gt;
&lt;td style="text-align: left"&gt;event number.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;evt.time&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;CHARBUF&lt;/td&gt;
&lt;td style="text-align: left"&gt;event timestamp as a time string that includes the nanosecond part.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;evt.time.s&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;CHARBUF&lt;/td&gt;
&lt;td style="text-align: left"&gt;event timestamp as a time string with no nanoseconds.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;evt.time.iso8601&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;CHARBUF&lt;/td&gt;
&lt;td style="text-align: left"&gt;event timestamp in ISO 8601 format, including nanoseconds and time zone offset (in UTC).&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;evt.datetime&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;CHARBUF&lt;/td&gt;
&lt;td style="text-align: left"&gt;event timestamp as a time string that includes the date.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;evt.datetime.s&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;CHARBUF&lt;/td&gt;
&lt;td style="text-align: left"&gt;event timestamp as a datetime string with no nanoseconds.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;evt.rawtime&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;ABSTIME&lt;/td&gt;
&lt;td style="text-align: left"&gt;absolute event timestamp, i.e. nanoseconds from epoch.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;evt.rawtime.s&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;ABSTIME&lt;/td&gt;
&lt;td style="text-align: left"&gt;integer part of the event timestamp (e.g. seconds since epoch).&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;evt.rawtime.ns&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;ABSTIME&lt;/td&gt;
&lt;td style="text-align: left"&gt;fractional part of the absolute event timestamp.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;evt.reltime&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;RELTIME&lt;/td&gt;
&lt;td style="text-align: left"&gt;number of nanoseconds from the beginning of the capture.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;evt.reltime.s&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;RELTIME&lt;/td&gt;
&lt;td style="text-align: left"&gt;number of seconds from the beginning of the capture.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;evt.reltime.ns&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;RELTIME&lt;/td&gt;
&lt;td style="text-align: left"&gt;fractional part (in ns) of the time from the beginning of the capture.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;evt.pluginname&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;CHARBUF&lt;/td&gt;
&lt;td style="text-align: left"&gt;if the event comes from a plugin-defined event source, the name of the plugin that generated it. The plugin must be currently loaded.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;evt.plugininfo&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;CHARBUF&lt;/td&gt;
&lt;td style="text-align: left"&gt;if the event comes from a plugin-defined event source, a summary of the event as formatted by the plugin. The plugin must be currently loaded.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;evt.source&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;CHARBUF&lt;/td&gt;
&lt;td style="text-align: left"&gt;the name of the source that produced the event.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;evt.is_async&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;BOOL&lt;/td&gt;
&lt;td style="text-align: left"&gt;'true' for asynchronous events, 'false' otherwise.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;evt.asynctype&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;CHARBUF&lt;/td&gt;
&lt;td style="text-align: left"&gt;If the event is asynchronous, the type of the event (e.g. 'container').&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;evt.hostname&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;CHARBUF&lt;/td&gt;
&lt;td style="text-align: left"&gt;The hostname of the underlying host can be customized by setting an environment variable (e.g. FALCO_HOSTNAME for the Falco agent). This is valuable in Kubernetes setups, where the hostname can match the pod name particularly in DaemonSet deployments. To achieve this, assign Kubernetes' spec.nodeName to the environment variable. Notably, spec.nodeName generally includes the cluster name.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="field-class-evt-for-system-calls"&gt;Field Class: evt (for system calls)&lt;/h3&gt;
&lt;p&gt;Event fields applicable to syscall events. Note that for most events you can access the individual arguments/parameters of each syscall via evt.arg, e.g. evt.arg.filename.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style="text-align: left"&gt;Name&lt;/th&gt;
&lt;th style="text-align: left"&gt;Type&lt;/th&gt;
&lt;th style="text-align: left"&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;evt.deltatime&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;RELTIME&lt;/td&gt;
&lt;td style="text-align: left"&gt;delta between this event and the previous event, in nanoseconds.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;evt.deltatime.s&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;RELTIME&lt;/td&gt;
&lt;td style="text-align: left"&gt;integer part of the delta between this event and the previous event.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;evt.deltatime.ns&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;RELTIME&lt;/td&gt;
&lt;td style="text-align: left"&gt;fractional part of the delta between this event and the previous event.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;evt.type&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;CHARBUF&lt;/td&gt;
&lt;td style="text-align: left"&gt;The name of the event (e.g. 'open').&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;evt.type.is&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;UINT32&lt;/td&gt;
&lt;td style="text-align: left"&gt;allows one to specify an event type, and returns 1 for events that are of that type. For example, evt.type.is.open returns 1 for open events, 0 for any other event.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;syscall.type&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;CHARBUF&lt;/td&gt;
&lt;td style="text-align: left"&gt;For system call events, the name of the system call (e.g. 'open'). Unset for other events (e.g. switch or internal events). Use this field instead of evt.type if you need to make sure that the filtered/printed value is actually a system call.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;evt.category&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;CHARBUF&lt;/td&gt;
&lt;td style="text-align: left"&gt;The event category. Example values are 'file' (for file operations like open and close), 'net' (for network operations like socket and bind), memory (for things like brk or mmap), and so on.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;evt.cpu&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;INT16&lt;/td&gt;
&lt;td style="text-align: left"&gt;number of the CPU where this event happened.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;evt.args&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;CHARBUF&lt;/td&gt;
&lt;td style="text-align: left"&gt;all the event arguments, aggregated into a single string.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;evt.arg&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;CHARBUF&lt;/td&gt;
&lt;td style="text-align: left"&gt;one of the event arguments specified by name or by number. Some events (e.g. return codes or FDs) will be converted into a text representation when possible. E.g. 'evt.arg.fd' or 'evt.arg[0]'.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;evt.rawarg&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;DYNAMIC&lt;/td&gt;
&lt;td style="text-align: left"&gt;one of the event arguments specified by name. E.g. 'evt.rawarg.fd'.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;evt.info&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;CHARBUF&lt;/td&gt;
&lt;td style="text-align: left"&gt;Currently, this field returns the same value as 'evt.args'.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;evt.buffer&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;BYTEBUF&lt;/td&gt;
&lt;td style="text-align: left"&gt;the binary data buffer for events that have one, like read(), recvfrom(), etc. Use this field in filters with 'contains' to search into I/O data buffers.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;evt.buflen&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;UINT64&lt;/td&gt;
&lt;td style="text-align: left"&gt;the length of the binary data buffer for events that have one, like read(), recvfrom(), etc.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;evt.res&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;CHARBUF&lt;/td&gt;
&lt;td style="text-align: left"&gt;event return value, as a string. If the event failed, the result is an error code string (e.g. 'ENOENT'), otherwise the result is the string 'SUCCESS'.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;evt.rawres&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;INT64&lt;/td&gt;
&lt;td style="text-align: left"&gt;event return value, as a number (e.g. -2). Useful for range comparisons.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;evt.failed&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;BOOL&lt;/td&gt;
&lt;td style="text-align: left"&gt;'true' for events that returned an error status.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;evt.is_io&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;BOOL&lt;/td&gt;
&lt;td style="text-align: left"&gt;'true' for events that read or write to FDs, like read(), send, recvfrom(), etc.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;evt.is_io_read&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;BOOL&lt;/td&gt;
&lt;td style="text-align: left"&gt;'true' for events that read from FDs, like read(), recv(), recvfrom(), etc.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;evt.is_io_write&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;BOOL&lt;/td&gt;
&lt;td style="text-align: left"&gt;'true' for events that write to FDs, like write(), send(), etc.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;evt.io_dir&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;CHARBUF&lt;/td&gt;
&lt;td style="text-align: left"&gt;'r' for events that read from FDs, like read(); 'w' for events that write to FDs, like write().&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;evt.is_wait&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;BOOL&lt;/td&gt;
&lt;td style="text-align: left"&gt;'true' for events that make the thread wait, e.g. sleep(), select(), poll().&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;evt.is_syslog&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;BOOL&lt;/td&gt;
&lt;td style="text-align: left"&gt;'true' for events that are writes to /dev/log.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;evt.count&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;UINT32&lt;/td&gt;
&lt;td style="text-align: left"&gt;This filter field always returns 1.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;evt.count.error&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;UINT32&lt;/td&gt;
&lt;td style="text-align: left"&gt;This filter field returns 1 for events that returned with an error.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;evt.count.error.file&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;UINT32&lt;/td&gt;
&lt;td style="text-align: left"&gt;This filter field returns 1 for events that returned with an error and are related to file I/O.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;evt.count.error.net&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;UINT32&lt;/td&gt;
&lt;td style="text-align: left"&gt;This filter field returns 1 for events that returned with an error and are related to network I/O.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;evt.count.error.memory&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;UINT32&lt;/td&gt;
&lt;td style="text-align: left"&gt;This filter field returns 1 for events that returned with an error and are related to memory allocation.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;evt.count.error.other&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;UINT32&lt;/td&gt;
&lt;td style="text-align: left"&gt;This filter field returns 1 for events that returned with an error and are related to none of the previous categories.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;evt.count.exit&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;UINT32&lt;/td&gt;
&lt;td style="text-align: left"&gt;This filter field returns 1 for exit events.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;evt.around&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;UINT64&lt;/td&gt;
&lt;td style="text-align: left"&gt;Accepts the event if it's around the specified time interval. The syntax is evt.around[T]=D, where T is the value returned by %evt.rawtime for the event and D is a delta in milliseconds. For example, evt.around[1404996934793590564]=1000 will return the events with timestamp with one second before the timestamp and one second after it, for a total of two seconds of capture.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;evt.abspath&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;CHARBUF&lt;/td&gt;
&lt;td style="text-align: left"&gt;Absolute path calculated from dirfd and name during syscalls like renameat and symlinkat. Use 'evt.abspath.src' or 'evt.abspath.dst' for syscalls that support multiple paths.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;evt.is_open_read&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;BOOL&lt;/td&gt;
&lt;td style="text-align: left"&gt;'true' for open/openat/openat2/open_by_handle_at events where the path was opened for reading&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;evt.is_open_write&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;BOOL&lt;/td&gt;
&lt;td style="text-align: left"&gt;'true' for open/openat/openat2/open_by_handle_at events where the path was opened for writing&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;evt.is_open_exec&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;BOOL&lt;/td&gt;
&lt;td style="text-align: left"&gt;'true' for open/openat/openat2/open_by_handle_at or creat events where a file is created with execute permissions&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;evt.is_open_create&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;BOOL&lt;/td&gt;
&lt;td style="text-align: left"&gt;'true' for for open/openat/openat2/open_by_handle_at events where a file is created.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="field-class-process"&gt;Field Class: process&lt;/h3&gt;
&lt;p&gt;Additional information about the process and thread executing the syscall event.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style="text-align: left"&gt;Name&lt;/th&gt;
&lt;th style="text-align: left"&gt;Type&lt;/th&gt;
&lt;th style="text-align: left"&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;proc.exe&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;CHARBUF&lt;/td&gt;
&lt;td style="text-align: left"&gt;The first command-line argument (i.e., argv[0]), typically the executable name or a custom string as specified by the user. It is primarily obtained from syscall arguments, truncated after 4096 bytes, or, as a fallback, by reading /proc/PID/cmdline, in which case it may be truncated after 1024 bytes. This field may differ from the last component of proc.exepath, reflecting how command invocation and execution paths can vary.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;proc.pexe&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;CHARBUF&lt;/td&gt;
&lt;td style="text-align: left"&gt;The proc.exe (first command line argument argv[0]) of the parent process.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;proc.aexe&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;CHARBUF&lt;/td&gt;
&lt;td style="text-align: left"&gt;The proc.exe (first command line argument argv[0]) for a specific process ancestor. You can access different levels of ancestors by using indices. For example, proc.aexe[1] retrieves the proc.exe of the parent process, proc.aexe[2] retrieves the proc.exe of the grandparent process, and so on. The current process's proc.exe line can be obtained using proc.aexe[0]. When used without any arguments, proc.aexe is applicable only in filters and matches any of the process ancestors. For instance, you can use &lt;code&gt;proc.aexe endswith java&lt;/code&gt; to match any process ancestor whose proc.exe ends with the term &lt;code&gt;java&lt;/code&gt;.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;proc.exepath&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;CHARBUF&lt;/td&gt;
&lt;td style="text-align: left"&gt;The full executable path of a process, resolving to the canonical path for symlinks. This is primarily obtained from the kernel, or as a fallback, by reading /proc/PID/exe (in the latter case, the path is truncated after 1024 bytes). For eBPF drivers, due to verifier limits, path components may be truncated to 24 for legacy eBPF on kernel &amp;lt;5.2, 48 for legacy eBPF on kernel &amp;gt;=5.2, or 96 for modern eBPF.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;proc.pexepath&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;CHARBUF&lt;/td&gt;
&lt;td style="text-align: left"&gt;The proc.exepath (full executable path) of the parent process.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;proc.aexepath&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;CHARBUF&lt;/td&gt;
&lt;td style="text-align: left"&gt;The proc.exepath (full executable path) for a specific process ancestor. You can access different levels of ancestors by using indices. For example, proc.aexepath[1] retrieves the proc.exepath of the parent process, proc.aexepath[2] retrieves the proc.exepath of the grandparent process, and so on. The current process's proc.exepath line can be obtained using proc.aexepath[0]. When used without any arguments, proc.aexepath is applicable only in filters and matches any of the process ancestors. For instance, you can use &lt;code&gt;proc.aexepath endswith java&lt;/code&gt; to match any process ancestor whose path ends with the term &lt;code&gt;java&lt;/code&gt;.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;proc.name&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;CHARBUF&lt;/td&gt;
&lt;td style="text-align: left"&gt;The process name (truncated after 16 characters) generating the event (task-&amp;gt;comm). Truncation is determined by kernel settings and not by Falco. This field is collected from the syscalls args or, as a fallback, extracted from /proc/PID/comm. The name of the process and the name of the executable file on disk (if applicable) can be different if a process is given a custom name which is often the case for example for java applications.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;proc.pname&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;CHARBUF&lt;/td&gt;
&lt;td style="text-align: left"&gt;The proc.name (truncated after 16 characters) of the parent process.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;proc.aname&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;CHARBUF&lt;/td&gt;
&lt;td style="text-align: left"&gt;The proc.name (truncated after 16 characters) for a specific process ancestor. You can access different levels of ancestors by using indices. For example, proc.aname[1] retrieves the proc.name of the parent process, proc.aname[2] retrieves the proc.name of the grandparent process, and so on. The current process's proc.name line can be obtained using proc.aname[0]. When used without any arguments, proc.aname is applicable only in filters and matches any of the process ancestors. For instance, you can use &lt;code&gt;proc.aname=bash&lt;/code&gt; to match any process ancestor whose name is &lt;code&gt;bash&lt;/code&gt;.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;proc.args&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;CHARBUF&lt;/td&gt;
&lt;td style="text-align: left"&gt;The arguments passed on the command line when starting the process generating the event excluding argv[0] (truncated after 4096 bytes). This field is collected from the system call arguments, or as a fallback, extracted from /proc/PID/cmdline, can be accessed by specifying proc.args[INDEX], e.g., proc.args[0] or proc.args[1]. The indexing is zero-based, meaning proc.args[0] refers to the first command-line argument passed, rather than argv[0].&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;proc.aargs&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;CHARBUF&lt;/td&gt;
&lt;td style="text-align: left"&gt;The arguments passed on the command line when starting the process generating the event for a specific process ancestor. You can access different levels of ancestors by using indices. For example, proc.aargs[1] retrieves the arguments passed on the command line of the parent process, proc.aargs[2] retrieves the proc.args of the grandparent process, and so on. The current process's arguments passed on the command line can be obtained using proc.aargs[0]. When used without any arguments, proc.aargs is applicable only in filters and matches any of the process ancestors. For instance, you can use &lt;code&gt;proc.aargs contains base64&lt;/code&gt; to match any process ancestor whose arguments passed on the command line contains the term base64.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;proc.cmdline&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;CHARBUF&lt;/td&gt;
&lt;td style="text-align: left"&gt;The concatenation of &lt;code&gt;proc.name + proc.args&lt;/code&gt; (truncated after 4096 bytes) when starting the process generating the event.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;proc.pcmdline&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;CHARBUF&lt;/td&gt;
&lt;td style="text-align: left"&gt;The proc.cmdline (full command line (proc.name + proc.args)) of the parent process.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;proc.acmdline&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;CHARBUF&lt;/td&gt;
&lt;td style="text-align: left"&gt;The full command line (proc.name + proc.args) for a specific process ancestor. You can access different levels of ancestors by using indices. For example, proc.acmdline[1] retrieves the full command line of the parent process, proc.acmdline[2] retrieves the proc.cmdline of the grandparent process, and so on. The current process's full command line can be obtained using proc.acmdline[0]. When used without any arguments, proc.acmdline is applicable only in filters and matches any of the process ancestors. For instance, you can use &lt;code&gt;proc.acmdline contains base64&lt;/code&gt; to match any process ancestor whose command line contains the term base64.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;proc.cmdnargs&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;UINT64&lt;/td&gt;
&lt;td style="text-align: left"&gt;The number of command line args (proc.args).&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;proc.cmdlenargs&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;UINT64&lt;/td&gt;
&lt;td style="text-align: left"&gt;The total count of characters / length of the command line args (proc.args) combined excluding whitespaces between args.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;proc.exeline&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;CHARBUF&lt;/td&gt;
&lt;td style="text-align: left"&gt;The full command line, with exe as first argument (proc.exe + proc.args) when starting the process generating the event.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;proc.env&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;CHARBUF&lt;/td&gt;
&lt;td style="text-align: left"&gt;The environment variables of the process generating the event as concatenated string 'ENV_NAME=value ENV_NAME1=value1'. Can also be used to extract the value of a known env variable, e.g. proc.env[ENV_NAME].&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;proc.aenv&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;CHARBUF&lt;/td&gt;
&lt;td style="text-align: left"&gt;[EXPERIMENTAL] This field can be used in three flavors: (1) as a filter checking all parents, e.g. 'proc.aenv contains xyz', which is similar to the familiar 'proc.aname contains xyz' approach, (2) checking the &lt;code&gt;proc.env&lt;/code&gt; of a specified level of the parent, e.g. 'proc.aenv[2]', which is similar to the familiar 'proc.aname[2]' approach, or (3) checking the first matched value of a known ENV_NAME in the parent lineage, such as 'proc.aenv[ENV_NAME]' (across a max of 20 ancestor levels). This field may be deprecated or undergo breaking changes in future releases. Please use it with caution.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;proc.cwd&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;CHARBUF&lt;/td&gt;
&lt;td style="text-align: left"&gt;The current working directory of the event.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;proc.loginshellid&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;INT64&lt;/td&gt;
&lt;td style="text-align: left"&gt;The pid of the oldest shell among the ancestors of the current process, if there is one. This field can be used to separate different user sessions.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;proc.tty&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;UINT32&lt;/td&gt;
&lt;td style="text-align: left"&gt;The controlling terminal of the process. 0 for processes without a terminal.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;proc.pid&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;INT64&lt;/td&gt;
&lt;td style="text-align: left"&gt;The id of the process generating the event.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;proc.ppid&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;INT64&lt;/td&gt;
&lt;td style="text-align: left"&gt;The pid of the parent of the process generating the event.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;proc.apid&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;INT64&lt;/td&gt;
&lt;td style="text-align: left"&gt;The pid for a specific process ancestor. You can access different levels of ancestors by using indices. For example, proc.apid[1] retrieves the pid of the parent process, proc.apid[2] retrieves the pid of the grandparent process, and so on. The current process's pid can be obtained using proc.apid[0]. When used without any arguments, proc.apid is applicable only in filters and matches any of the process ancestors. For instance, you can use &lt;code&gt;proc.apid=1337&lt;/code&gt; to match any process ancestor whose pid is equal to 1337.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;proc.vpid&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;INT64&lt;/td&gt;
&lt;td style="text-align: left"&gt;The id of the process generating the event as seen from its current PID namespace.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;proc.pvpid&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;INT64&lt;/td&gt;
&lt;td style="text-align: left"&gt;The id of the parent process generating the event as seen from its current PID namespace.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;proc.sid&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;INT64&lt;/td&gt;
&lt;td style="text-align: left"&gt;The session id of the process generating the event.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;proc.sname&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;CHARBUF&lt;/td&gt;
&lt;td style="text-align: left"&gt;The name of the current process's session leader. This is either the process with pid=proc.sid or the eldest ancestor that has the same sid as the current process.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;proc.sid.exe&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;CHARBUF&lt;/td&gt;
&lt;td style="text-align: left"&gt;The first command line argument argv[0] (usually the executable name or a custom one) of the current process's session leader. This is either the process with pid=proc.sid or the eldest ancestor that has the same sid as the current process.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;proc.sid.exepath&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;CHARBUF&lt;/td&gt;
&lt;td style="text-align: left"&gt;The full executable path of the current process's session leader. This is either the process with pid=proc.sid or the eldest ancestor that has the same sid as the current process.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;proc.vpgid&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;INT64&lt;/td&gt;
&lt;td style="text-align: left"&gt;The process group id of the process generating the event, as seen from its current PID namespace.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;proc.vpgid.name&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;CHARBUF&lt;/td&gt;
&lt;td style="text-align: left"&gt;The name of the current process's process group leader. This is either the process with proc.vpgid == proc.vpid or the eldest ancestor that has the same vpgid as the current process. The description of &lt;code&gt;proc.is_vpgid_leader&lt;/code&gt; offers additional insights.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;proc.vpgid.exe&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;CHARBUF&lt;/td&gt;
&lt;td style="text-align: left"&gt;The first command line argument argv[0] (usually the executable name or a custom one) of the current process's process group leader. This is either the process with proc.vpgid == proc.vpid or the eldest ancestor that has the same vpgid as the current process. The description of &lt;code&gt;proc.is_vpgid_leader&lt;/code&gt; offers additional insights.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;proc.vpgid.exepath&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;CHARBUF&lt;/td&gt;
&lt;td style="text-align: left"&gt;The full executable path of the current process's process group leader. This is either the process with proc.vpgid == proc.vpid or the eldest ancestor that has the same vpgid as the current process. The description of &lt;code&gt;proc.is_vpgid_leader&lt;/code&gt; offers additional insights.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;proc.pgid&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;INT64&lt;/td&gt;
&lt;td style="text-align: left"&gt;The process group id of the process generating the event, as seen from host PID namespace.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;proc.pgid.name&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;CHARBUF&lt;/td&gt;
&lt;td style="text-align: left"&gt;The name of the current process's process group leader. This is either the process with proc.pgid == proc.pid or the eldest ancestor that has the same pgid as the current process. The description of &lt;code&gt;proc.is_pgid_leader&lt;/code&gt; offers additional insights.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;proc.pgid.exe&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;CHARBUF&lt;/td&gt;
&lt;td style="text-align: left"&gt;The first command line argument argv[0] (usually the executable name or a custom one) of the current process's process group leader. This is either the process with proc.pgid == proc.pid or the eldest ancestor that has the same pgid as the current process. The description of &lt;code&gt;proc.is_pgid_leader&lt;/code&gt; offers additional insights.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;proc.pgid.exepath&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;CHARBUF&lt;/td&gt;
&lt;td style="text-align: left"&gt;The full executable path of the current process's process group leader. This is either the process with proc.pgid == proc.pid or the eldest ancestor that has the same pgid as the current process. The description of &lt;code&gt;proc.is_pgid_leader&lt;/code&gt; offers additional insights.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;proc.duration&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;RELTIME&lt;/td&gt;
&lt;td style="text-align: left"&gt;Number of nanoseconds since the process started.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;proc.ppid.duration&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;RELTIME&lt;/td&gt;
&lt;td style="text-align: left"&gt;Number of nanoseconds since the parent process started.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;proc.pid.ts&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;RELTIME&lt;/td&gt;
&lt;td style="text-align: left"&gt;Start of process as epoch timestamp in nanoseconds.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;proc.ppid.ts&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;RELTIME&lt;/td&gt;
&lt;td style="text-align: left"&gt;Start of parent process as epoch timestamp in nanoseconds.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;proc.is_exe_writable&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;BOOL&lt;/td&gt;
&lt;td style="text-align: left"&gt;'true' if this process' executable file is writable by the same user that spawned the process.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;proc.is_exe_upper_layer&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;BOOL&lt;/td&gt;
&lt;td style="text-align: left"&gt;'true' if this process' executable file is in upper layer in overlayfs. This field value can only be trusted if the underlying kernel version is greater or equal than 3.18.0, since overlayfs was introduced at that time.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;proc.is_exe_lower_layer&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;BOOL&lt;/td&gt;
&lt;td style="text-align: left"&gt;'true' if this process' executable file is in lower layer in overlayfs. This field value can only be trusted if the underlying kernel version is greater or equal than 3.18.0, since overlayfs was introduced at that time.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;proc.is_exe_from_memfd&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;BOOL&lt;/td&gt;
&lt;td style="text-align: left"&gt;'true' if the executable file of the current process is an anonymous file created using memfd_create() and is being executed by referencing its file descriptor (fd). This type of file exists only in memory and not on disk. Relevant to detect malicious in-memory code injection. Requires kernel version greater or equal to 3.17.0.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;proc.is_sid_leader&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;BOOL&lt;/td&gt;
&lt;td style="text-align: left"&gt;'true' if this process is the leader of the process session, proc.sid == proc.vpid. For host processes vpid reflects pid.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;proc.is_vpgid_leader&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;BOOL&lt;/td&gt;
&lt;td style="text-align: left"&gt;'true' if this process is the leader of the virtual process group, proc.vpgid == proc.vpid. For host processes vpgid and vpid reflect pgid and pid. Can help to distinguish if the process was 'directly' executed for instance in a tty (similar to bash history logging, &lt;code&gt;is_vpgid_leader&lt;/code&gt; would be 'true') or executed as descendent process in the same process group which for example is the case when subprocesses are spawned from a script (&lt;code&gt;is_vpgid_leader&lt;/code&gt; would be 'false').&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;proc.is_pgid_leader&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;BOOL&lt;/td&gt;
&lt;td style="text-align: left"&gt;'true' if this process is the leader of the process group, proc.pgid == proc.pid. Can help to distinguish if the process was 'directly' executed for instance in a tty (similar to bash history logging, &lt;code&gt;is_pgid_leader&lt;/code&gt; would be 'true') or executed as descendent process in the same process group which for example is the case when subprocesses are spawned from a script (&lt;code&gt;is_pgid_leader&lt;/code&gt; would be 'false').&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;proc.exe_ino&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;INT64&lt;/td&gt;
&lt;td style="text-align: left"&gt;The inode number of the executable file on disk. Can be correlated with fd.ino.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;proc.exe_ino.ctime&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;ABSTIME&lt;/td&gt;
&lt;td style="text-align: left"&gt;Last status change time of executable file (inode-&amp;gt;ctime) as epoch timestamp in nanoseconds. Time is changed by writing or by setting inode information e.g. owner, group, link count, mode etc.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;proc.exe_ino.mtime&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;ABSTIME&lt;/td&gt;
&lt;td style="text-align: left"&gt;Last modification time of executable file (inode-&amp;gt;mtime) as epoch timestamp in nanoseconds. Time is changed by file modifications, e.g. by mknod, truncate, utime, write of more than zero bytes etc. For tracking changes in owner, group, link count or mode, use proc.exe_ino.ctime instead.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;proc.exe_ino.ctime_duration_proc_start&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;ABSTIME&lt;/td&gt;
&lt;td style="text-align: left"&gt;Number of nanoseconds between modifying status of executable image and spawning a new process using the changed executable image.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;proc.exe_ino.ctime_duration_pidns_start&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;ABSTIME&lt;/td&gt;
&lt;td style="text-align: left"&gt;Number of nanoseconds between PID namespace start ts and ctime exe file if PID namespace start predates ctime.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;proc.pidns_init_start_ts&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;UINT64&lt;/td&gt;
&lt;td style="text-align: left"&gt;Start of PID namespace (container or non container pid namespace) as epoch timestamp in nanoseconds.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;thread.cap_permitted&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;CHARBUF&lt;/td&gt;
&lt;td style="text-align: left"&gt;The permitted capabilities set&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;thread.cap_inheritable&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;CHARBUF&lt;/td&gt;
&lt;td style="text-align: left"&gt;The inheritable capabilities set&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;thread.cap_effective&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;CHARBUF&lt;/td&gt;
&lt;td style="text-align: left"&gt;The effective capabilities set&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;proc.fdopencount&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;UINT64&lt;/td&gt;
&lt;td style="text-align: left"&gt;Number of open FDs for the process&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;proc.fdlimit&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;INT64&lt;/td&gt;
&lt;td style="text-align: left"&gt;Maximum number of FDs the process can open.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;proc.fdusage&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;DOUBLE&lt;/td&gt;
&lt;td style="text-align: left"&gt;The ratio between open FDs and maximum available FDs for the process.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;proc.vmsize&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;UINT64&lt;/td&gt;
&lt;td style="text-align: left"&gt;Total virtual memory for the process (as kb).&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;proc.vmrss&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;UINT64&lt;/td&gt;
&lt;td style="text-align: left"&gt;Resident non-swapped memory for the process (as kb).&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;proc.vmswap&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;UINT64&lt;/td&gt;
&lt;td style="text-align: left"&gt;Swapped memory for the process (as kb).&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;thread.pfmajor&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;UINT64&lt;/td&gt;
&lt;td style="text-align: left"&gt;Number of major page faults since thread start.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;thread.pfminor&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;UINT64&lt;/td&gt;
&lt;td style="text-align: left"&gt;Number of minor page faults since thread start.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;thread.tid&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;INT64&lt;/td&gt;
&lt;td style="text-align: left"&gt;The id of the thread generating the event.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;thread.ismain&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;BOOL&lt;/td&gt;
&lt;td style="text-align: left"&gt;'true' if the thread generating the event is the main one in the process.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;thread.vtid&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;INT64&lt;/td&gt;
&lt;td style="text-align: left"&gt;The id of the thread generating the event as seen from its current PID namespace.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;thread.exectime&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;RELTIME&lt;/td&gt;
&lt;td style="text-align: left"&gt;CPU time spent by the last scheduled thread, in nanoseconds. Exported by switch events only.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;thread.totexectime&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;RELTIME&lt;/td&gt;
&lt;td style="text-align: left"&gt;Total CPU time, in nanoseconds since the beginning of the capture, for the current thread. Exported by switch events only.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;thread.cgroups&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;CHARBUF&lt;/td&gt;
&lt;td style="text-align: left"&gt;All cgroups the thread belongs to, aggregated into a single string.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;thread.cgroup&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;CHARBUF&lt;/td&gt;
&lt;td style="text-align: left"&gt;The cgroup the thread belongs to, for a specific subsystem. e.g. thread.cgroup.cpuacct.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;proc.nthreads&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;UINT64&lt;/td&gt;
&lt;td style="text-align: left"&gt;The number of alive threads that the process generating the event currently has, including the leader thread. Please note that the leader thread may not be here, in that case 'proc.nthreads' and 'proc.nchilds' are equal&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;proc.nchilds&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;UINT64&lt;/td&gt;
&lt;td style="text-align: left"&gt;The number of alive not leader threads that the process generating the event currently has. This excludes the leader thread.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;thread.cpu&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;DOUBLE&lt;/td&gt;
&lt;td style="text-align: left"&gt;The CPU consumed by the thread in the last second.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;thread.cpu.user&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;DOUBLE&lt;/td&gt;
&lt;td style="text-align: left"&gt;The user CPU consumed by the thread in the last second.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;thread.cpu.system&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;DOUBLE&lt;/td&gt;
&lt;td style="text-align: left"&gt;The system CPU consumed by the thread in the last second.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;thread.vmsize&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;UINT64&lt;/td&gt;
&lt;td style="text-align: left"&gt;For the process main thread, this is the total virtual memory for the process (as kb). For the other threads, this field is zero.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;thread.vmrss&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;UINT64&lt;/td&gt;
&lt;td style="text-align: left"&gt;For the process main thread, this is the resident non-swapped memory for the process (as kb). For the other threads, this field is zero.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;proc.stdin.type&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;CHARBUF&lt;/td&gt;
&lt;td style="text-align: left"&gt;The type of file descriptor 0, corresponding to stdin, of the process generating the event.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;proc.stdout.type&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;CHARBUF&lt;/td&gt;
&lt;td style="text-align: left"&gt;The type of file descriptor 1, corresponding to stdout, of the process generating the event.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;proc.stderr.type&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;CHARBUF&lt;/td&gt;
&lt;td style="text-align: left"&gt;The type of file descriptor 2, corresponding to stderr, of the process generating the event.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;proc.stdin.name&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;CHARBUF&lt;/td&gt;
&lt;td style="text-align: left"&gt;The name of the file descriptor 0, corresponding to stdin, of the process generating the event.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;proc.stdout.name&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;CHARBUF&lt;/td&gt;
&lt;td style="text-align: left"&gt;The name of the file descriptor 1, corresponding to stdout, of the process generating the event.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;proc.stderr.name&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;CHARBUF&lt;/td&gt;
&lt;td style="text-align: left"&gt;The name of the file descriptor 2, corresponding to stderr, of the process generating the event.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="field-class-user"&gt;Field Class: user&lt;/h3&gt;
&lt;p&gt;Information about the user executing the specific event.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style="text-align: left"&gt;Name&lt;/th&gt;
&lt;th style="text-align: left"&gt;Type&lt;/th&gt;
&lt;th style="text-align: left"&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;user.uid&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;UINT32&lt;/td&gt;
&lt;td style="text-align: left"&gt;user ID.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;user.name&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;CHARBUF&lt;/td&gt;
&lt;td style="text-align: left"&gt;user name.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;user.homedir&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;CHARBUF&lt;/td&gt;
&lt;td style="text-align: left"&gt;home directory of the user.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;user.shell&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;CHARBUF&lt;/td&gt;
&lt;td style="text-align: left"&gt;user's shell.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;user.loginuid&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;INT64&lt;/td&gt;
&lt;td style="text-align: left"&gt;audit user id (auid), internally the loginuid is of type &lt;code&gt;uint32_t&lt;/code&gt;. However, if an invalid uid corresponding to UINT32_MAX is encountered, it is returned as -1 to support familiar filtering conditions.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;user.loginname&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;CHARBUF&lt;/td&gt;
&lt;td style="text-align: left"&gt;audit user name (auid).&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="field-class-group"&gt;Field Class: group&lt;/h3&gt;
&lt;p&gt;Information about the user group.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style="text-align: left"&gt;Name&lt;/th&gt;
&lt;th style="text-align: left"&gt;Type&lt;/th&gt;
&lt;th style="text-align: left"&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;group.gid&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;UINT32&lt;/td&gt;
&lt;td style="text-align: left"&gt;group ID.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;group.name&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;CHARBUF&lt;/td&gt;
&lt;td style="text-align: left"&gt;group name.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="field-class-fd"&gt;Field Class: fd&lt;/h3&gt;
&lt;p&gt;Every syscall that has a file descriptor in its arguments has these fields set with information related to the file.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style="text-align: left"&gt;Name&lt;/th&gt;
&lt;th style="text-align: left"&gt;Type&lt;/th&gt;
&lt;th style="text-align: left"&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;fd.num&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;INT64&lt;/td&gt;
&lt;td style="text-align: left"&gt;the unique number identifying the file descriptor.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;fd.type&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;CHARBUF&lt;/td&gt;
&lt;td style="text-align: left"&gt;type of FD. Can be 'file', 'directory', 'ipv4', 'ipv6', 'unix', 'pipe', 'event', 'signalfd', 'eventpoll', 'inotify' 'signalfd' or 'memfd'.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;fd.typechar&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;CHARBUF&lt;/td&gt;
&lt;td style="text-align: left"&gt;type of FD as a single character. Can be 'f' for file, 4 for IPv4 socket, 6 for IPv6 socket, 'u' for unix socket, p for pipe, 'e' for eventfd, 's' for signalfd, 'l' for eventpoll, 'i' for inotify, 'b' for bpf, 'u' for userfaultd, 'r' for io_uring, 'm' for memfd ,'o' for unknown.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;fd.name&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;CHARBUF&lt;/td&gt;
&lt;td style="text-align: left"&gt;FD full name. If the fd is a file, this field contains the full path. If the FD is a socket, this field contain the connection tuple.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;fd.directory&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;CHARBUF&lt;/td&gt;
&lt;td style="text-align: left"&gt;If the fd is a file, the directory that contains it.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;fd.filename&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;CHARBUF&lt;/td&gt;
&lt;td style="text-align: left"&gt;If the fd is a file, the filename without the path.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;fd.ip&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;IPADDR&lt;/td&gt;
&lt;td style="text-align: left"&gt;matches the ip address (client or server) of the fd.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;fd.cip&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;IPADDR&lt;/td&gt;
&lt;td style="text-align: left"&gt;client IP address.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;fd.sip&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;IPADDR&lt;/td&gt;
&lt;td style="text-align: left"&gt;server IP address.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;fd.lip&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;IPADDR&lt;/td&gt;
&lt;td style="text-align: left"&gt;local IP address.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;fd.rip&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;IPADDR&lt;/td&gt;
&lt;td style="text-align: left"&gt;remote IP address.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;fd.port&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;PORT&lt;/td&gt;
&lt;td style="text-align: left"&gt;matches the port (either client or server) of the fd.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;fd.cport&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;PORT&lt;/td&gt;
&lt;td style="text-align: left"&gt;for TCP/UDP FDs, the client port.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;fd.sport&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;PORT&lt;/td&gt;
&lt;td style="text-align: left"&gt;for TCP/UDP FDs, server port.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;fd.lport&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;PORT&lt;/td&gt;
&lt;td style="text-align: left"&gt;for TCP/UDP FDs, the local port.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;fd.rport&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;PORT&lt;/td&gt;
&lt;td style="text-align: left"&gt;for TCP/UDP FDs, the remote port.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;fd.l4proto&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;CHARBUF&lt;/td&gt;
&lt;td style="text-align: left"&gt;the IP protocol of a socket. Can be 'tcp', 'udp', 'icmp' or 'raw'.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;fd.sockfamily&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;CHARBUF&lt;/td&gt;
&lt;td style="text-align: left"&gt;the socket family for socket events. Can be 'ip' or 'unix'.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;fd.is_server&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;BOOL&lt;/td&gt;
&lt;td style="text-align: left"&gt;'true' if the process owning this FD is the server endpoint in the connection.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;fd.uid&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;CHARBUF&lt;/td&gt;
&lt;td style="text-align: left"&gt;a unique identifier for the FD, created by chaining the FD number and the thread ID.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;fd.containername&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;CHARBUF&lt;/td&gt;
&lt;td style="text-align: left"&gt;chaining of the container ID and the FD name. Useful when trying to identify which container an FD belongs to.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;fd.containerdirectory&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;CHARBUF&lt;/td&gt;
&lt;td style="text-align: left"&gt;chaining of the container ID and the directory name. Useful when trying to identify which container a directory belongs to.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;fd.proto&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;PORT&lt;/td&gt;
&lt;td style="text-align: left"&gt;matches the protocol (either client or server) of the fd.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;fd.cproto&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;CHARBUF&lt;/td&gt;
&lt;td style="text-align: left"&gt;for TCP/UDP FDs, the client protocol.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;fd.sproto&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;CHARBUF&lt;/td&gt;
&lt;td style="text-align: left"&gt;for TCP/UDP FDs, server protocol.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;fd.lproto&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;CHARBUF&lt;/td&gt;
&lt;td style="text-align: left"&gt;for TCP/UDP FDs, the local protocol.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;fd.rproto&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;CHARBUF&lt;/td&gt;
&lt;td style="text-align: left"&gt;for TCP/UDP FDs, the remote protocol.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;fd.net&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;IPNET&lt;/td&gt;
&lt;td style="text-align: left"&gt;matches the IP network (client or server) of the fd.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;fd.cnet&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;IPNET&lt;/td&gt;
&lt;td style="text-align: left"&gt;matches the client IP network of the fd.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;fd.snet&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;IPNET&lt;/td&gt;
&lt;td style="text-align: left"&gt;matches the server IP network of the fd.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;fd.lnet&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;IPNET&lt;/td&gt;
&lt;td style="text-align: left"&gt;matches the local IP network of the fd.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;fd.rnet&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;IPNET&lt;/td&gt;
&lt;td style="text-align: left"&gt;matches the remote IP network of the fd.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;fd.connected&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;BOOL&lt;/td&gt;
&lt;td style="text-align: left"&gt;for TCP/UDP FDs, 'true' if the socket is connected.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;fd.name_changed&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;BOOL&lt;/td&gt;
&lt;td style="text-align: left"&gt;True when an event changes the name of an fd used by this event. This can occur in some cases such as udp connections where the connection tuple changes.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;fd.cip.name&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;CHARBUF&lt;/td&gt;
&lt;td style="text-align: left"&gt;Domain name associated with the client IP address.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;fd.sip.name&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;CHARBUF&lt;/td&gt;
&lt;td style="text-align: left"&gt;Domain name associated with the server IP address.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;fd.lip.name&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;CHARBUF&lt;/td&gt;
&lt;td style="text-align: left"&gt;Domain name associated with the local IP address.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;fd.rip.name&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;CHARBUF&lt;/td&gt;
&lt;td style="text-align: left"&gt;Domain name associated with the remote IP address.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;fd.dev&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;INT32&lt;/td&gt;
&lt;td style="text-align: left"&gt;device number (major/minor) containing the referenced file&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;fd.dev.major&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;INT32&lt;/td&gt;
&lt;td style="text-align: left"&gt;major device number containing the referenced file&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;fd.dev.minor&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;INT32&lt;/td&gt;
&lt;td style="text-align: left"&gt;minor device number containing the referenced file&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;fd.ino&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;INT64&lt;/td&gt;
&lt;td style="text-align: left"&gt;inode number of the referenced file&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;fd.nameraw&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;CHARBUF&lt;/td&gt;
&lt;td style="text-align: left"&gt;FD full name raw. Just like fd.name, but only used if fd is a file path. File path is kept raw with limited sanitization and without deriving the absolute path.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;fd.types&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;LIST(CHARBUF)&lt;/td&gt;
&lt;td style="text-align: left"&gt;List of FD types in used. Can be passed an fd number e.g. fd.types[0] to get the type of stdout as a single item list.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;fd.is_upper_layer&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;BOOL&lt;/td&gt;
&lt;td style="text-align: left"&gt;'true' if the fd is of a file in the upper layer of an overlayfs.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;fd.is_lower_layer&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;BOOL&lt;/td&gt;
&lt;td style="text-align: left"&gt;'true' if the fd is of a file in the lower layer of an overlayfs.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="field-class-fs-path"&gt;Field Class: fs.path&lt;/h3&gt;
&lt;p&gt;Every syscall that has a filesystem path in its arguments has these fields set with information related to the path arguments. This differs from the fd.* fields as it includes syscalls like unlink, rename, etc. that act directly on filesystem paths as compared to opened file descriptors.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style="text-align: left"&gt;Name&lt;/th&gt;
&lt;th style="text-align: left"&gt;Type&lt;/th&gt;
&lt;th style="text-align: left"&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;fs.path.name&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;CHARBUF&lt;/td&gt;
&lt;td style="text-align: left"&gt;For any event type that deals with a filesystem path, the path the file syscall is operating on. This path is always fully resolved, prepending the thread cwd when needed.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;fs.path.nameraw&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;CHARBUF&lt;/td&gt;
&lt;td style="text-align: left"&gt;For any event type that deals with a filesystem path, the path the file syscall is operating on. This path is always the path provided to the syscall and may not be fully resolved.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;fs.path.source&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;CHARBUF&lt;/td&gt;
&lt;td style="text-align: left"&gt;For any event type that deals with a filesystem path, and specifically for a source and target like mv, cp, etc, the source path the file syscall is operating on. This path is always fully resolved, prepending the thread cwd when needed.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;fs.path.sourceraw&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;CHARBUF&lt;/td&gt;
&lt;td style="text-align: left"&gt;For any event type that deals with a filesystem path, and specifically for a source and target like mv, cp, etc, the source path the file syscall is operating on. This path is always the path provided to the syscall and may not be fully resolved.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;fs.path.target&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;CHARBUF&lt;/td&gt;
&lt;td style="text-align: left"&gt;For any event type that deals with a filesystem path, and specifically for a target and target like mv, cp, etc, the target path the file syscall is operating on. This path is always fully resolved, prepending the thread cwd when needed.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;fs.path.targetraw&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;CHARBUF&lt;/td&gt;
&lt;td style="text-align: left"&gt;For any event type that deals with a filesystem path, and specifically for a target and target like mv, cp, etc, the target path the file syscall is operating on. This path is always the path provided to the syscall and may not be fully resolved.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="field-class-fdlist"&gt;Field Class: fdlist&lt;/h3&gt;
&lt;p&gt;Poll event related fields.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style="text-align: left"&gt;Name&lt;/th&gt;
&lt;th style="text-align: left"&gt;Type&lt;/th&gt;
&lt;th style="text-align: left"&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;fdlist.nums&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;CHARBUF&lt;/td&gt;
&lt;td style="text-align: left"&gt;for poll events, this is a comma-separated list of the FD numbers in the 'fds' argument, returned as a string.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;fdlist.names&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;CHARBUF&lt;/td&gt;
&lt;td style="text-align: left"&gt;for poll events, this is a comma-separated list of the FD names in the 'fds' argument, returned as a string.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;fdlist.cips&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;CHARBUF&lt;/td&gt;
&lt;td style="text-align: left"&gt;for poll events, this is a comma-separated list of the client IP addresses in the 'fds' argument, returned as a string.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;fdlist.sips&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;CHARBUF&lt;/td&gt;
&lt;td style="text-align: left"&gt;for poll events, this is a comma-separated list of the server IP addresses in the 'fds' argument, returned as a string.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;fdlist.cports&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;CHARBUF&lt;/td&gt;
&lt;td style="text-align: left"&gt;for TCP/UDP FDs, for poll events, this is a comma-separated list of the client TCP/UDP ports in the 'fds' argument, returned as a string.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;fdlist.sports&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;CHARBUF&lt;/td&gt;
&lt;td style="text-align: left"&gt;for poll events, this is a comma-separated list of the server TCP/UDP ports in the 'fds' argument, returned as a string.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="field-class-container-plugin"&gt;Field Class: container (plugin)&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style="text-align: left"&gt;Name&lt;/th&gt;
&lt;th style="text-align: left"&gt;Type&lt;/th&gt;
&lt;th style="text-align: left"&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;container.id&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;CHARBUF&lt;/td&gt;
&lt;td style="text-align: left"&gt;The truncated container ID (first 12 characters), e.g. 3ad7b26ded6d is extracted from the Linux cgroups by Falco within the kernel. Consequently, this field is reliably available and serves as the lookup key for Falco's synchronous or asynchronous requests against the container runtime socket to retrieve all other 'container.&lt;em&gt;' information. One important aspect to be aware of is that if the process occurs on the host, meaning not in the container PID namespace, this field is set to a string called 'host'. In Kubernetes, pod sandbox container processes can exist where &lt;code&gt;container.id&lt;/code&gt; matches &lt;code&gt;k8s.pod.sandbox_id&lt;/code&gt;, lacking other 'container.&lt;/em&gt;' details.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;container.full_id&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;CHARBUF&lt;/td&gt;
&lt;td style="text-align: left"&gt;The full container ID, e.g. 3ad7b26ded6d8e7b23da7d48fe889434573036c27ae5a74837233de441c3601e. In contrast to &lt;code&gt;container.id&lt;/code&gt;, we enrich this field as part of the container engine enrichment. In instances of userspace container engine lookup delays, this field may not be available yet.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;container.name&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;CHARBUF&lt;/td&gt;
&lt;td style="text-align: left"&gt;The container name. In instances of userspace container engine lookup delays, this field may not be available yet. One important aspect to be aware of is that if the process occurs on the host, meaning not in the container PID namespace, this field is set to a string called 'host'.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;container.image&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;CHARBUF&lt;/td&gt;
&lt;td style="text-align: left"&gt;The container image name (e.g. falcosecurity/falco:latest for docker). In instances of userspace container engine lookup delays, this field may not be available yet.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;container.image.id&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;CHARBUF&lt;/td&gt;
&lt;td style="text-align: left"&gt;The container image id (e.g. 6f7e2741b66b). In instances of userspace container engine lookup delays, this field may not be available yet.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;container.type&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;CHARBUF&lt;/td&gt;
&lt;td style="text-align: left"&gt;The container type, e.g. docker, cri-o, containerd etc.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;container.privileged&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;BOOL&lt;/td&gt;
&lt;td style="text-align: left"&gt;'true' for containers running as privileged, 'false' otherwise. In instances of userspace container engine lookup delays, this field may not be available yet.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;container.mounts&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;CHARBUF&lt;/td&gt;
&lt;td style="text-align: left"&gt;A space-separated list of mount information. Each item in the list has the format 'source:dest:mode:rdrw:propagation'. In instances of userspace container engine lookup delays, this field may not be available yet.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;container.mount&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;CHARBUF&lt;/td&gt;
&lt;td style="text-align: left"&gt;Information about a single mount, specified by number (e.g. container.mount[0]) or mount source (container.mount[/usr/local]). The pathname can be a glob (container.mount[/usr/local/*]), in which case the first matching mount will be returned. The information has the format 'source:dest:mode:rdrw:propagation'. If there is no mount with the specified index or matching the provided source, returns the string &amp;quot;none&amp;quot; instead of a NULL value. In instances of userspace container engine lookup delays, this field may not be available yet.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;container.mount.source&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;CHARBUF&lt;/td&gt;
&lt;td style="text-align: left"&gt;The mount source, specified by number (e.g. container.mount.source[0]) or mount destination (container.mount.source[/host/lib/modules]). The pathname can be a glob. In instances of userspace container engine lookup delays, this field may not be available yet.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;container.mount.dest&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;CHARBUF&lt;/td&gt;
&lt;td style="text-align: left"&gt;The mount destination, specified by number (e.g. container.mount.dest[0]) or mount source (container.mount.dest[/lib/modules]). The pathname can be a glob. In instances of userspace container engine lookup delays, this field may not be available yet.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;container.mount.mode&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;CHARBUF&lt;/td&gt;
&lt;td style="text-align: left"&gt;The mount mode, specified by number (e.g. container.mount.mode[0]) or mount source (container.mount.mode[/usr/local]). The pathname can be a glob. In instances of userspace container engine lookup delays, this field may not be available yet.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;container.mount.rdwr&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;CHARBUF&lt;/td&gt;
&lt;td style="text-align: left"&gt;The mount rdwr value, specified by number (e.g. container.mount.rdwr[0]) or mount source (container.mount.rdwr[/usr/local]). The pathname can be a glob. In instances of userspace container engine lookup delays, this field may not be available yet.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;container.mount.propagation&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;CHARBUF&lt;/td&gt;
&lt;td style="text-align: left"&gt;The mount propagation value, specified by number (e.g. container.mount.propagation[0]) or mount source (container.mount.propagation[/usr/local]). The pathname can be a glob. In instances of userspace container engine lookup delays, this field may not be available yet.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;container.image.repository&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;CHARBUF&lt;/td&gt;
&lt;td style="text-align: left"&gt;The container image repository (e.g. falcosecurity/falco). In instances of userspace container engine lookup delays, this field may not be available yet.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;container.image.tag&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;CHARBUF&lt;/td&gt;
&lt;td style="text-align: left"&gt;The container image tag (e.g. stable, latest). In instances of userspace container engine lookup delays, this field may not be available yet.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;container.image.digest&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;CHARBUF&lt;/td&gt;
&lt;td style="text-align: left"&gt;The container image registry digest (e.g. sha256:d977378f890d445c15e51795296e4e5062f109ce6da83e0a355fc4ad8699d27). In instances of userspace container engine lookup delays, this field may not be available yet.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;container.healthcheck&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;CHARBUF&lt;/td&gt;
&lt;td style="text-align: left"&gt;The container's health check. Will be the null value (&amp;quot;N/A&amp;quot;) if no healthcheck configured, &amp;quot;NONE&amp;quot; if configured but explicitly not created, and the healthcheck command line otherwise. In instances of userspace container engine lookup delays, this field may not be available yet.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;container.liveness_probe&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;CHARBUF&lt;/td&gt;
&lt;td style="text-align: left"&gt;The container's liveness probe. Will be the null value (&amp;quot;N/A&amp;quot;) if no liveness probe configured, the liveness probe command line otherwise. In instances of userspace container engine lookup delays, this field may not be available yet.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;container.readiness_probe&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;CHARBUF&lt;/td&gt;
&lt;td style="text-align: left"&gt;The container's readiness probe. Will be the null value (&amp;quot;N/A&amp;quot;) if no readiness probe configured, the readiness probe command line otherwise. In instances of userspace container engine lookup delays, this field may not be available yet.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;container.start_ts&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;ABSTIME&lt;/td&gt;
&lt;td style="text-align: left"&gt;Container start as epoch timestamp in nanoseconds based on proc.pidns_init_start_ts and extracted in the kernel and not from the container runtime socket / container engine.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;container.duration&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;RELTIME&lt;/td&gt;
&lt;td style="text-align: left"&gt;Number of nanoseconds since container.start_ts.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;container.ip&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;CHARBUF&lt;/td&gt;
&lt;td style="text-align: left"&gt;The container's / pod's primary ip address as retrieved from the container engine. Only ipv4 addresses are tracked. Consider container.cni.json (CRI use case) for logging ip addresses for each network interface. In instances of userspace container engine lookup delays, this field may not be available yet.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;container.cni.json&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;CHARBUF&lt;/td&gt;
&lt;td style="text-align: left"&gt;The container's / pod's CNI result field from the respective pod status info. It contains ip addresses for each network interface exposed as unparsed escaped JSON string. Supported for CRI container engine (containerd, cri-o runtimes), optimized for containerd (some non-critical JSON keys removed). Useful for tracking ips (ipv4 and ipv6, dual-stack support) for each network interface (multi-interface support). In instances of userspace container engine lookup delays, this field may not be available yet.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;container.host_pid&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;BOOL&lt;/td&gt;
&lt;td style="text-align: left"&gt;'true' if the container is running in the host PID namespace, 'false' otherwise.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;container.host_network&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;BOOL&lt;/td&gt;
&lt;td style="text-align: left"&gt;'true' if the container is running in the host network namespace, 'false' otherwise.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;container.host_ipc&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;BOOL&lt;/td&gt;
&lt;td style="text-align: left"&gt;'true' if the container is running in the host IPC namespace, 'false' otherwise.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;container.label&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;CHARBUF&lt;/td&gt;
&lt;td style="text-align: left"&gt;Container label. E.g. 'container.label.foo'.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;container.labels&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;CHARBUF&lt;/td&gt;
&lt;td style="text-align: left"&gt;Container comma-separated key/value labels. E.g. 'foo1:bar1,foo2:bar2'.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;proc.is_container_healthcheck&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;BOOL&lt;/td&gt;
&lt;td style="text-align: left"&gt;'true' if this process is running as a part of the container's health check.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;proc.is_container_liveness_probe&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;BOOL&lt;/td&gt;
&lt;td style="text-align: left"&gt;'true' if this process is running as a part of the container's liveness probe.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;proc.is_container_readiness_probe&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;BOOL&lt;/td&gt;
&lt;td style="text-align: left"&gt;'true' if this process is running as a part of the container's readiness probe.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;k8s.pod.name&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;CHARBUF&lt;/td&gt;
&lt;td style="text-align: left"&gt;The Kubernetes pod name. This field is extracted from the container runtime socket simultaneously as we look up the 'container.*' fields. In cases of lookup delays, it may not be available yet.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;k8s.ns.name&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;CHARBUF&lt;/td&gt;
&lt;td style="text-align: left"&gt;The Kubernetes namespace name. This field is extracted from the container runtime socket simultaneously as we look up the 'container.*' fields. In cases of lookup delays, it may not be available yet.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;k8s.pod.id&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;CHARBUF&lt;/td&gt;
&lt;td style="text-align: left"&gt;[LEGACY] The Kubernetes pod UID, e.g. 3e41dc6b-08a8-44db-bc2a-3724b18ab19a. This legacy field points to &lt;code&gt;k8s.pod.uid&lt;/code&gt;; however, the pod ID typically refers to the pod sandbox ID. We recommend using the semantically more accurate &lt;code&gt;k8s.pod.uid&lt;/code&gt; field. This field is extracted from the container runtime socket simultaneously as we look up the 'container.*' fields. In cases of lookup delays, it may not be available yet.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;k8s.pod.uid&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;CHARBUF&lt;/td&gt;
&lt;td style="text-align: left"&gt;The Kubernetes pod UID, e.g. 3e41dc6b-08a8-44db-bc2a-3724b18ab19a. Note that the pod UID is a unique identifier assigned upon pod creation within Kubernetes, allowing the Kubernetes control plane to manage and track pods reliably. As such, it is fundamentally a different concept compared to the pod sandbox ID. This field is extracted from the container runtime socket simultaneously as we look up the 'container.*' fields. In cases of lookup delays, it may not be available yet.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;k8s.pod.sandbox_id&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;CHARBUF&lt;/td&gt;
&lt;td style="text-align: left"&gt;The truncated Kubernetes pod sandbox ID (first 12 characters), e.g 63060edc2d3a. The sandbox ID is specific to the container runtime environment. It is the equivalent of the container ID for the pod / sandbox and extracted from the Linux cgroups. As such, it differs from the pod UID. This field is extracted from the container runtime socket simultaneously as we look up the 'container.&lt;em&gt;' fields. In cases of lookup delays, it may not be available yet. In Kubernetes, pod sandbox container processes can exist where &lt;code&gt;container.id&lt;/code&gt; matches &lt;code&gt;k8s.pod.sandbox_id&lt;/code&gt;, lacking other 'container.&lt;/em&gt;' details.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;k8s.pod.full_sandbox_id&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;CHARBUF&lt;/td&gt;
&lt;td style="text-align: left"&gt;The full Kubernetes pod / sandbox ID, e.g 63060edc2d3aa803ab559f2393776b151f99fc5b05035b21db66b3b62246ad6a. This field is extracted from the container runtime socket simultaneously as we look up the 'container.*' fields. In cases of lookup delays, it may not be available yet.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;k8s.pod.label&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;CHARBUF&lt;/td&gt;
&lt;td style="text-align: left"&gt;The Kubernetes pod label. The label can be accessed either with the familiar brackets notation, e.g. 'k8s.pod.label[foo]' or by appending a dot followed by the name, e.g. 'k8s.pod.label.foo'. The label name itself can include the original special characters such as '.', '-', '_' or '/' characters. For instance, 'k8s.pod.label[app.kubernetes.io/name]', 'k8s.pod.label.app.kubernetes.io/name' or 'k8s.pod.label[custom-label_one]' are all valid. This field is extracted from the container runtime socket simultaneously as we look up the 'container.*' fields. In cases of lookup delays, it may not be available yet.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;k8s.pod.labels&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;CHARBUF&lt;/td&gt;
&lt;td style="text-align: left"&gt;The Kubernetes pod comma-separated key/value labels. E.g. 'foo1:bar1,foo2:bar2'. This field is extracted from the container runtime socket simultaneously as we look up the 'container.*' fields. In cases of lookup delays, it may not be available yet.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;k8s.pod.ip&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;CHARBUF&lt;/td&gt;
&lt;td style="text-align: left"&gt;The Kubernetes pod ip, same as container.ip field as each container in a pod shares the network stack of the sandbox / pod. Only ipv4 addresses are tracked. Consider k8s.pod.cni.json for logging ip addresses for each network interface. This field is extracted from the container runtime socket simultaneously as we look up the 'container.*' fields. In cases of lookup delays, it may not be available yet.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;k8s.pod.cni.json&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;CHARBUF&lt;/td&gt;
&lt;td style="text-align: left"&gt;The Kubernetes pod CNI result field from the respective pod status info, same as container.cni.json field. It contains ip addresses for each network interface exposed as unparsed escaped JSON string. Supported for CRI container engine (containerd, cri-o runtimes), optimized for containerd (some non-critical JSON keys removed). Useful for tracking ips (ipv4 and ipv6, dual-stack support) for each network interface (multi-interface support). This field is extracted from the container runtime socket simultaneously as we look up the 'container.*' fields. In cases of lookup delays, it may not be available yet.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;k8s.rc.name&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;CHARBUF&lt;/td&gt;
&lt;td style="text-align: left"&gt;Deprecated. Use &lt;code&gt;k8smeta&lt;/code&gt; plugin instead.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;k8s.rc.id&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;CHARBUF&lt;/td&gt;
&lt;td style="text-align: left"&gt;Deprecated. Use &lt;code&gt;k8smeta&lt;/code&gt; plugin instead.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;k8s.rc.label&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;CHARBUF&lt;/td&gt;
&lt;td style="text-align: left"&gt;Deprecated. Use &lt;code&gt;k8smeta&lt;/code&gt; plugin instead.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;k8s.rc.labels&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;CHARBUF&lt;/td&gt;
&lt;td style="text-align: left"&gt;Deprecated. Use &lt;code&gt;k8smeta&lt;/code&gt; plugin instead.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;k8s.svc.name&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;CHARBUF&lt;/td&gt;
&lt;td style="text-align: left"&gt;Deprecated. Use &lt;code&gt;k8smeta&lt;/code&gt; plugin instead.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;k8s.svc.id&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;CHARBUF&lt;/td&gt;
&lt;td style="text-align: left"&gt;Deprecated. Use &lt;code&gt;k8smeta&lt;/code&gt; plugin instead.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;k8s.svc.label&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;CHARBUF&lt;/td&gt;
&lt;td style="text-align: left"&gt;Deprecated. Use &lt;code&gt;k8smeta&lt;/code&gt; plugin instead.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;k8s.svc.labels&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;CHARBUF&lt;/td&gt;
&lt;td style="text-align: left"&gt;Deprecated. Use &lt;code&gt;k8smeta&lt;/code&gt; plugin instead.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;k8s.ns.id&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;CHARBUF&lt;/td&gt;
&lt;td style="text-align: left"&gt;Deprecated. Use &lt;code&gt;k8smeta&lt;/code&gt; plugin instead.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;k8s.ns.label&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;CHARBUF&lt;/td&gt;
&lt;td style="text-align: left"&gt;Deprecated. Use &lt;code&gt;k8smeta&lt;/code&gt; plugin instead.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;k8s.ns.labels&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;CHARBUF&lt;/td&gt;
&lt;td style="text-align: left"&gt;Deprecated. Use &lt;code&gt;k8smeta&lt;/code&gt; plugin instead.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;k8s.rs.name&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;CHARBUF&lt;/td&gt;
&lt;td style="text-align: left"&gt;Deprecated. Use &lt;code&gt;k8smeta&lt;/code&gt; plugin instead.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;k8s.rs.id&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;CHARBUF&lt;/td&gt;
&lt;td style="text-align: left"&gt;Deprecated. Use &lt;code&gt;k8smeta&lt;/code&gt; plugin instead.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;k8s.rs.label&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;CHARBUF&lt;/td&gt;
&lt;td style="text-align: left"&gt;Deprecated. Use &lt;code&gt;k8smeta&lt;/code&gt; plugin instead.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;k8s.rs.labels&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;CHARBUF&lt;/td&gt;
&lt;td style="text-align: left"&gt;Deprecated. Use &lt;code&gt;k8smeta&lt;/code&gt; plugin instead.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;k8s.deployment.name&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;CHARBUF&lt;/td&gt;
&lt;td style="text-align: left"&gt;Deprecated. Use &lt;code&gt;k8smeta&lt;/code&gt; plugin instead.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;k8s.deployment.id&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;CHARBUF&lt;/td&gt;
&lt;td style="text-align: left"&gt;Deprecated. Use &lt;code&gt;k8smeta&lt;/code&gt; plugin instead.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;k8s.deployment.label&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;CHARBUF&lt;/td&gt;
&lt;td style="text-align: left"&gt;Deprecated. Use &lt;code&gt;k8smeta&lt;/code&gt; plugin instead.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;k8s.deployment.labels&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;CHARBUF&lt;/td&gt;
&lt;td style="text-align: left"&gt;Deprecated. Use &lt;code&gt;k8smeta&lt;/code&gt; plugin instead.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;</description></item><item><title>Docs: Generating sample events</title><link>https://v0-43--falcosecurity.netlify.app/docs/concepts/event-sources/kernel/sample-events/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://v0-43--falcosecurity.netlify.app/docs/concepts/event-sources/kernel/sample-events/</guid><description>
&lt;p&gt;If you'd like to check if Falco is working properly, we have the &lt;a class='glossary-tooltip' title='Generate a variety of suspect actions that are detected by Falco rulesets.' data-toggle='tooltip' data-placement='top' href='https://github.com/falcosecurity/event-generator' target='_blank' aria-label='event-generator'&gt;event-generator&lt;/a&gt; tool that can perform an activity for both our &lt;a class='glossary-tooltip' title='Syscalls stands for system calls, a way to request a service from the running kernel.' data-toggle='tooltip' data-placement='top' href='https://man7.org/linux/man-pages/man2/syscalls.2.html' target='_blank' aria-label='syscalls'&gt;syscalls&lt;/a&gt; and &lt;a class='glossary-tooltip' title='Audit logs from the Kubernetes control plane.' data-toggle='tooltip' data-placement='top' href='https://kubernetes.io/docs/tasks/debug/debug-cluster/audit/' target='_blank' aria-label='k8s audit'&gt;k8s audit&lt;/a&gt; related rules.&lt;/p&gt;
&lt;p&gt;The tool provides a command to run either some or all sample events.&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;event-generator run [regexp]
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Without arguments it runs all actions, otherwise only those actions matching the given regular expression.&lt;/p&gt;
&lt;p&gt;The full command line documentation is &lt;a href="https://github.com/falcosecurity/event-generator/blob/master/docs/event-generator_run.md"&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id="downloads"&gt;Downloads&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Artifacts&lt;/th&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;Version&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;binaries&lt;/td&gt;
&lt;td&gt;&lt;a href="https://github.com/falcosecurity/event-generator/releases/latest"&gt;download link&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href="https://github.com/falcosecurity/event-generator/releases/latest"&gt;&lt;img src="https://img.shields.io/github/release/falcosecurity/event-generator.svg?style=flat-square" alt="Release" loading="lazy" /&gt;
&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;container images&lt;/td&gt;
&lt;td&gt;&lt;code&gt;docker pull falcosecurity/event-generator:latest&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href="https://hub.docker.com/r/falcosecurity/event-generator/tags"&gt;&lt;img src="https://img.shields.io/docker/v/falcosecurity/event-generator?color=blue&amp;amp;style=flat-square" alt="Docker Image Version (latest semver)" loading="lazy" /&gt;
&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="sample-events"&gt;Sample events&lt;/h2&gt;
&lt;div class="card card-sm pageinfo pageinfo-warning my-4"&gt;
&lt;div class="card-body"&gt;
&lt;div class="card-text"&gt;
&lt;p&gt;&lt;strong&gt;WARNING&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Since some commands might alter your system, we strongly recommend that you run the program within a container (see below).&lt;br&gt;
For example, some actions modify files and directories below &lt;code&gt;/bin&lt;/code&gt;, &lt;code&gt;/etc&lt;/code&gt;, &lt;code&gt;/dev&lt;/code&gt;, etc.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id="system-call-activity"&gt;System Call Activity&lt;/h3&gt;
&lt;p&gt;The &lt;code&gt;syscall&lt;/code&gt; collection performs a variety of suspect actions that are detected by the &lt;a href="https://github.com/falcosecurity/rules/blob/master/rules/falco_rules.yaml"&gt;default Falco ruleset&lt;/a&gt;.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;docker run -it --rm falcosecurity/event-generator run syscall --loop
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The above command loops forever, incessantly generating a sample event each second.&lt;/p&gt;
&lt;h3 id="kubernetes-auditing-activity"&gt;Kubernetes Auditing Activity&lt;/h3&gt;
&lt;p&gt;The &lt;code&gt;k8saudit&lt;/code&gt; collection generates activity that matches the &lt;a href="https://github.com/falcosecurity/plugins/blob/master/plugins/k8saudit/rules/k8s_audit_rules.yaml"&gt;k8s audit event ruleset&lt;/a&gt;.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;event-generator run k8saudit --loop
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The above command loops forever, creating resources in the current namespace and deleting them after each iteration. Use the &lt;code&gt;--namespace&lt;/code&gt; option to choose a different namespace.&lt;/p&gt;
&lt;h2 id="running-the-event-generator-in-k8s"&gt;Running the Event Generator in K8s&lt;/h2&gt;
&lt;p&gt;We've also provided a &lt;a href="https://github.com/falcosecurity/charts/tree/master/charts/event-generator"&gt;helm chart&lt;/a&gt; that make it easy to run the event generator in K8s Clusters.&lt;/p&gt;
&lt;p&gt;First thing, we need to add the &lt;code&gt;falcosecurity&lt;/code&gt; charts repository:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;helm repo add falcosecurity https://falcosecurity.github.io/charts
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;helm repo update
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Once you have the helm repo configured, you can run the following to create the necessary objects in the &lt;code&gt;event-generator&lt;/code&gt; namespace and then generate events continuously:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;helm install event-generator falcosecurity/event-generator &lt;span style="color:#b62;font-weight:bold"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; --namespace event-generator &lt;span style="color:#b62;font-weight:bold"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; --create-namespace &lt;span style="color:#b62;font-weight:bold"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; --set config.loop&lt;span style="color:#666"&gt;=&lt;/span&gt;&lt;span style="color:#a2f"&gt;false&lt;/span&gt; &lt;span style="color:#b62;font-weight:bold"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; --set config.actions&lt;span style="color:#666"&gt;=&lt;/span&gt;&lt;span style="color:#b44"&gt;&amp;#34;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The above command applies to the &lt;code&gt;event-generator&lt;/code&gt; namespace. Use the &lt;code&gt;--namespace&lt;/code&gt; option to deploy in a different namespace. Events will be generated in the same namespace.&lt;/p&gt;
&lt;p&gt;You can also find more examples in the &lt;a href="https://github.com/falcosecurity/event-generator#with-kubernetes"&gt;event-generator&lt;/a&gt; and &lt;a href="https://github.com/falcosecurity/charts/tree/master/charts/event-generator"&gt;charts&lt;/a&gt; repositories.&lt;/p&gt;</description></item><item><title>Docs: Rule Exceptions</title><link>https://v0-43--falcosecurity.netlify.app/docs/concepts/rules/exceptions/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://v0-43--falcosecurity.netlify.app/docs/concepts/rules/exceptions/</guid><description>
&lt;h2 id="introduction"&gt;Introduction&lt;/h2&gt;
&lt;p&gt;Almost all Falco Rules have cases where the behavior &lt;a class='glossary-tooltip' title='Identify a suspicious event or behavior.' data-toggle='tooltip' data-placement='top' href='https://v0-43--falcosecurity.netlify.app/docs/reference/glossary/?all=true#term-detection' target='_blank' aria-label='detected'&gt;detected&lt;/a&gt; by the &lt;a class='glossary-tooltip' title='Rules are conditions under which an alert should be generated.' data-toggle='tooltip' data-placement='top' href='https://v0-43--falcosecurity.netlify.app/docs/rules/basic-elements/#rules' target='_blank' aria-label='rule'&gt;rule&lt;/a&gt; should be allowed. For example, the rule &lt;code&gt;Write below binary dir&lt;/code&gt; has exceptions for specific programs that are known to write below these directories as a part of software installation/management:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;- &lt;span style="color:#008000;font-weight:bold"&gt;rule&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;Write below binary dir&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;desc&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;an attempt to write to any file below a set of binary directories&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;condition&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;&amp;gt;&lt;span style="color:#b44;font-style:italic"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#b44;font-style:italic"&gt; open_write
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#b44;font-style:italic"&gt; and bin_dir
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#b44;font-style:italic"&gt; and not package_mgmt_procs
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#b44;font-style:italic"&gt; and not exe_running_docker_save
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#b44;font-style:italic"&gt; and not python_running_get_pip
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#b44;font-style:italic"&gt; and not python_running_ms_oms
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#b44;font-style:italic"&gt; and not user_known_write_below_binary_dir_activities&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#00f;font-weight:bold"&gt;...&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Previously, these exceptions were expressed as concatenations to the original rule's condition. For example, looking at the &lt;a class='glossary-tooltip' title='Macros are rule condition snippets that can be re-used inside rules and even other macros.' data-toggle='tooltip' data-placement='top' href='https://v0-43--falcosecurity.netlify.app/docs/rules/basic-elements/#macros' target='_blank' aria-label='macro'&gt;macro&lt;/a&gt; package_mgmt_procs:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;- &lt;span style="color:#008000;font-weight:bold"&gt;macro&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;package_mgmt_procs&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;condition&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;proc.name in (package_mgmt_binaries)&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The result is appending &lt;code&gt;and not proc.name in (package_mgmt_binaries)&lt;/code&gt; to the condition of the rule.&lt;/p&gt;
&lt;p&gt;A more extreme case of this is the &lt;code&gt;write_below_etc&lt;/code&gt; macro used by &lt;code&gt;Write below etc&lt;/code&gt; rule. It had tens of exceptions:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt; ...
and not sed_temporary_file
and not exe_running_docker_save
and not ansible_running_python
and not python_running_denyhosts
and not fluentd_writing_conf_files
and not user_known_write_etc_conditions
and not run_by_centrify
and not run_by_adclient
and not qualys_writing_conf_files
and not git_writing_nssdb
...
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;The exceptions all generally follow the same structure: naming a program and a directory prefix below &lt;code&gt;/etc&lt;/code&gt; where that program is allowed to write files.&lt;/p&gt;
&lt;h2 id="rule-exceptions"&gt;Rule Exceptions&lt;/h2&gt;
&lt;p&gt;Starting in &lt;code&gt;0.28.0&lt;/code&gt;, Falco supports an optional &lt;code&gt;exceptions&lt;/code&gt; property to rules. The &lt;code&gt;exceptions&lt;/code&gt; key is a &lt;a class='glossary-tooltip' title='Lists are collections of items that can be included in rules, macros, or other lists.' data-toggle='tooltip' data-placement='top' href='https://v0-43--falcosecurity.netlify.app/docs/rules/basic-elements/#lists' target='_blank' aria-label='list'&gt;list&lt;/a&gt; of identifier plus list of tuples of filtercheck fields. Here's an example:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;- &lt;span style="color:#008000;font-weight:bold"&gt;rule&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;Write below binary dir&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;desc&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;an attempt to write to any file below a set of binary directories&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;condition&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;&amp;gt;&lt;span style="color:#b44;font-style:italic"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#b44;font-style:italic"&gt; open_write
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#b44;font-style:italic"&gt; and bin_dir
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#b44;font-style:italic"&gt; and not package_mgmt_procs
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#b44;font-style:italic"&gt; and not exe_running_docker_save
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#b44;font-style:italic"&gt; and not python_running_get_pip
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#b44;font-style:italic"&gt; and not python_running_ms_oms
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#b44;font-style:italic"&gt; and not user_known_write_below_binary_dir_activities&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;exceptions&lt;/span&gt;:&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;- &lt;span style="color:#008000;font-weight:bold"&gt;name&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;proc_writer&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;fields&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;[proc.name, fd.directory]&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;comps&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;[=, =]&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;values&lt;/span&gt;:&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;- [my-custom-yum, /usr/bin]&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;- [my-custom-apt, /usr/local/bin]&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;- &lt;span style="color:#008000;font-weight:bold"&gt;name&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;cmdline_writer&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;fields&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;[proc.cmdline, fd.directory]&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;comps&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;[startswith, =]&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;- &lt;span style="color:#008000;font-weight:bold"&gt;name&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;container_writer&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;fields&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;[container.image.repository, fd.directory]&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;- &lt;span style="color:#008000;font-weight:bold"&gt;name&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;proc_filenames&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;fields&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;[proc.name, fd.name]&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;comps&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;[=, in]&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;values&lt;/span&gt;:&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;- [my-custom-dpkg, [/usr/bin, /bin]]&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;- &lt;span style="color:#008000;font-weight:bold"&gt;name&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;filenames&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;fields&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;fd.filename&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;comps&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;in&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;This rule defines four kinds of exceptions:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;proc_writer&lt;/code&gt;: uses a combination of &lt;code&gt;proc.name&lt;/code&gt; and &lt;code&gt;fd.directory&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;cmdline_writer&lt;/code&gt;: uses a combination of &lt;code&gt;proc.cmeline&lt;/code&gt; and &lt;code&gt;fd.directory&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;container_writer&lt;/code&gt;: uses a combination of &lt;code&gt;container.image.repository&lt;/code&gt; and &lt;code&gt;fd.directory&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;proc_filenames&lt;/code&gt;: uses a combination of process and list of filenames.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;filenames&lt;/code&gt;: uses a list of filenames&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The specific strings &lt;code&gt;proc_writer&lt;/code&gt;/&lt;code&gt;container_writer&lt;/code&gt;/&lt;code&gt;proc_filenames&lt;/code&gt;/&lt;code&gt;filenames&lt;/code&gt; are arbitrary strings and don't have a special meaning to the rules file parser. They're only used to provide a handy name, and to potentially link together values in a later rule override (more on that below).&lt;/p&gt;
&lt;p&gt;Notice that exceptions are defined as a part of the rule. This is important because the author of the rule defines what construes a valid exception to the rule. In this case, an exception can consist of a process and file directory (actor and target), but not a process name only (too broad).&lt;/p&gt;
&lt;p&gt;The &lt;code&gt;fields&lt;/code&gt; property contains one or more fields that will extract a value from the events. The &lt;code&gt;comps&lt;/code&gt; property contains comparison operators that align 1-1 with the items in the fields property. The &lt;code&gt;values&lt;/code&gt; property contains tuples of values. Each item in the tuple should align 1-1 with the corresponding field and comparison operator. Together, each tuple of values is combined with the fields/comps to modify the condition to add an exclusion to the rule's condition.&lt;/p&gt;
&lt;p&gt;For example, for the exception &lt;code&gt;proc_writer&lt;/code&gt; above, the &lt;code&gt;fields&lt;/code&gt;/&lt;code&gt;comps&lt;/code&gt;/&lt;code&gt;values&lt;/code&gt; are the equivalent of adding the following to the rule's condition:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;... and not ((proc.name=my-custom-yum and fd.directory=/usr/bin) or (proc.name=my-custom-apt and fd.directory=/usr/local/bin))
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Note that when a comparison operator is &lt;code&gt;in&lt;/code&gt;, the corresponding values tuple item should be a list. &lt;code&gt;proc_filenames&lt;/code&gt; above uses that syntax, and is the equivalent of:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;... and not (proc.name=my-custom-dpkg and fd.name in (/usr/bin, /bin))
&lt;/code&gt;&lt;/pre&gt;&lt;h3 id="exception-syntax-shortcuts"&gt;Exception Syntax Shortcuts&lt;/h3&gt;
&lt;p&gt;In general, the value for an exceptions &lt;code&gt;fields&lt;/code&gt; property should always be a list of fields. The &lt;code&gt;comps&lt;/code&gt; property must be an equal-length list of comparison operators, and the &lt;code&gt;values&lt;/code&gt; property must be a list of tuples, where each tuple has the same length as the &lt;code&gt;fields&lt;/code&gt;/&lt;code&gt;comps&lt;/code&gt; lists.&lt;/p&gt;
&lt;p&gt;However, there are a few shortcuts that can be used when defining an exception:&lt;/p&gt;
&lt;h4 id="values-are-optional"&gt;Values are Optional&lt;/h4&gt;
&lt;p&gt;A rule may define &lt;code&gt;fields&lt;/code&gt; and &lt;code&gt;comps&lt;/code&gt;, but not define &lt;code&gt;values&lt;/code&gt;. This allows a later rule override to add values to an exception (more on that below). The exception &lt;code&gt;cmdline_writer&lt;/code&gt; above has this format:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt; - name: cmdline_writer
fields: [proc.cmdline, fd.directory]
comps: [startswith, =]
&lt;/code&gt;&lt;/pre&gt;&lt;h4 id="fields-comps-can-be-a-single-value-not-a-list"&gt;Fields/Comps Can Be a Single Value, Not a List&lt;/h4&gt;
&lt;p&gt;An alternative way to define an exception is to have &lt;code&gt;fields&lt;/code&gt; containing a single field and &lt;code&gt;comps&lt;/code&gt; containing a single comparison operator (which must be one of &lt;code&gt;in&lt;/code&gt;, &lt;code&gt;pmatch&lt;/code&gt;, &lt;code&gt;intersects&lt;/code&gt;). In this format, &lt;code&gt;values&lt;/code&gt; is a list of values rather than list of tuples. The exception &lt;code&gt;filenames&lt;/code&gt; above has this format:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt; - name: filenames
fields: fd.filename
comps: in
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;In this case, the exception is the equivalent of:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;... and not (fd.filename in (...))
&lt;/code&gt;&lt;/pre&gt;&lt;h4 id="comps-is-optional"&gt;Comps is Optional&lt;/h4&gt;
&lt;p&gt;If &lt;code&gt;comps&lt;/code&gt; is not provided, a default value is filled in. When &lt;code&gt;fields&lt;/code&gt; is a list, &lt;code&gt;comps&lt;/code&gt; will be set to an equal-length list of &lt;code&gt;=&lt;/code&gt; operators. The exception &lt;code&gt;container_writer&lt;/code&gt; above has that format, and is equivalent to:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt; - name: container_writer
fields: [container.image.repository, fd.directory]
comps: [=, =]
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;When &lt;code&gt;fields&lt;/code&gt; is a single field, &lt;code&gt;comps&lt;/code&gt; is set to a single &lt;code&gt;in&lt;/code&gt; operator.&lt;/p&gt;
&lt;h3 id="appending-exception-values"&gt;Appending Exception Values&lt;/h3&gt;
&lt;p&gt;Exception values will most commonly be defined in rules overrides. Here's an example:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;- &lt;span style="color:#008000;font-weight:bold"&gt;list&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;apt_files&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;items&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;[/bin/ls, /bin/rm]&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;- &lt;span style="color:#008000;font-weight:bold"&gt;rule&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;Write below binary dir&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;exceptions&lt;/span&gt;:&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;- &lt;span style="color:#008000;font-weight:bold"&gt;name&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;proc_writer&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;values&lt;/span&gt;:&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;- [apk, /usr/lib/alpine]&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;- [npm, /usr/node/bin]&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;- &lt;span style="color:#008000;font-weight:bold"&gt;name&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;container_writer&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;values&lt;/span&gt;:&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;- [docker.io/alpine, /usr/libexec/alpine]&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;- &lt;span style="color:#008000;font-weight:bold"&gt;name&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;proc_filenames&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;values&lt;/span&gt;:&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;- [apt, [apt_files]]&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;- [rpm, [/bin/cp, /bin/pwd]]&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;- &lt;span style="color:#008000;font-weight:bold"&gt;name&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;filenames&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;values&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;[python, go]&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;override&lt;/span&gt;:&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;exceptions&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;append&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;In this case, the values are appended to any values for the base rule, and then the &lt;code&gt;fields&lt;/code&gt;/&lt;code&gt;comps&lt;/code&gt;/&lt;code&gt;values&lt;/code&gt; are added to the rule's condition.&lt;/p&gt;
&lt;p&gt;Putting it all together, the effective rule condition for this rule is:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;... and not ((proc.name=my-custom-yum and fd.directory=/usr/bin) or # proc_writer
(proc.name=my-custom-apt and fd.directory=/usr/local/bin) or
(proc.name=apk and fd.directory=/usr/lib/alpine) or
(proc.name=npm and fd.directory=/usr/node/bin) or
(container.image.repository=docker.io/alpine and fd.name=/usr/libexec/alpine) or # container_writer
(proc.name=apt and fd.name in (apt_files)) or # proc_filenames
(proc.name=rpm and fd.name in (/bin/cp, /bin/pwd)) or
(fd.filename in (python, go)) # filenames
&lt;/code&gt;&lt;/pre&gt;&lt;h3 id="replacing-exception-values"&gt;Replacing Exception Values&lt;/h3&gt;
&lt;p&gt;It's possible to replace the entire list(s) of values tuples for specific exception(s) by following the &lt;a href="https://v0-43--falcosecurity.netlify.app/docs/reference/rules/overriding/"&gt;rules overriding syntax&lt;/a&gt; and specifying &lt;code&gt;exceptions: replace&lt;/code&gt;. Here's an example:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;- &lt;span style="color:#008000;font-weight:bold"&gt;list&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;apt_files&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;items&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;[/bin/ls, /bin/rm]&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;- &lt;span style="color:#008000;font-weight:bold"&gt;rule&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;Write below binary dir&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;exceptions&lt;/span&gt;:&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;- &lt;span style="color:#008000;font-weight:bold"&gt;name&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;proc_writer&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;values&lt;/span&gt;:&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;- [apk, /usr/lib/alpine]&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;- [npm, /usr/node/bin]&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;- &lt;span style="color:#008000;font-weight:bold"&gt;name&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;container_writer&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;values&lt;/span&gt;:&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;- [docker.io/alpine, /usr/libexec/alpine]&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;- &lt;span style="color:#008000;font-weight:bold"&gt;name&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;proc_filenames&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;values&lt;/span&gt;:&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;- [apt, [apt_files]]&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;- [rpm, [/bin/cp, /bin/pwd]]&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;- &lt;span style="color:#008000;font-weight:bold"&gt;name&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;filenames&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;values&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;[python, go]&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;override&lt;/span&gt;:&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;exceptions&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;replace&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Here, the values lists for the &lt;code&gt;proc_writer&lt;/code&gt;, &lt;code&gt;container_writer&lt;/code&gt;, &lt;code&gt;proc_filenames&lt;/code&gt; and &lt;code&gt;filenames&lt;/code&gt; exceptions will be replaced (or initialized) with the corresponding values lists, Putting it all together, the effective rule condition for this rule will be:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;... and not ((proc.name=apk and fd.directory=/usr/lib/alpine) or # proc_writer
(proc.name=npm and fd.directory=/usr/node/bin) or
(container.image.repository=docker.io/alpine and fd.name=/usr/libexec/alpine) or # container_writer
(proc.name=apt and fd.name in (apt_files)) or # proc_filenames
(proc.name=rpm and fd.name in (/bin/cp, /bin/pwd)) or
(fd.filename in (python, go)) # filenames
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id="guidelines-for-adding-exceptions-to-rules"&gt;Guidelines For Adding Exceptions To Rules&lt;/h2&gt;
&lt;p&gt;The default rules files have been revamped to use exceptions whenever possible, and are a good reference for best practices when defining exceptions for rules. Here are some other guidelines to follow:&lt;/p&gt;
&lt;h3 id="be-specific"&gt;Be Specific&lt;/h3&gt;
&lt;p&gt;When defining an exception, try to think about the &lt;em&gt;actor&lt;/em&gt;, &lt;em&gt;action&lt;/em&gt;, and &lt;em&gt;target&lt;/em&gt;, and whenever possible use all three items for an exception. For example, instead of simply using &lt;code&gt;proc.name&lt;/code&gt; or &lt;code&gt;container.image.repository&lt;/code&gt; for a file-based exception, also include the file being acted on via &lt;code&gt;fd.name&lt;/code&gt;, &lt;code&gt;fd.directory&lt;/code&gt;, etc. Similarly, if a rule is container-specific, don't only include the image &lt;code&gt;container.image.repository&lt;/code&gt;, also include the process name &lt;code&gt;proc.name&lt;/code&gt;.&lt;/p&gt;
&lt;h3 id="use-set-operators"&gt;Use Set Operators&lt;/h3&gt;
&lt;p&gt;If an exception involves a set of process names, file paths, etc., combine the process names into a list and use the &lt;code&gt;in&lt;/code&gt;/&lt;code&gt;pmatch&lt;/code&gt; operator to handle the values in a single exception. Here's an example:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;- &lt;span style="color:#008000;font-weight:bold"&gt;name&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;proc_file&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;fields&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;[proc.name, fd.name]&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;comps&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;[in, in]&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;values&lt;/span&gt;:&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;- [[qualys-cloud-ag], [/etc/qualys/cloud-agent/qagent-log.conf]]&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;- [[update-haproxy-,haproxy_reload.], [/etc/openvpn/client.map]]&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;- [[start-fluentd], [/etc/fluent/fluent.conf, /etc/td-agent/td-agent.conf]]&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;This exception matches process name and path, but allows for multiple process names writing to any of a set of files.&lt;/p&gt;
&lt;h2 id="more-information"&gt;More Information&lt;/h2&gt;
&lt;p&gt;The original &lt;a href="https://github.com/falcosecurity/falco/blob/master/proposals/20200828-structured-exception-handling.md"&gt;proposal&lt;/a&gt; describes the benefits of exceptions in more detail.&lt;/p&gt;</description></item><item><title>Docs: Controlling Rules</title><link>https://v0-43--falcosecurity.netlify.app/docs/concepts/rules/controlling-rules/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://v0-43--falcosecurity.netlify.app/docs/concepts/rules/controlling-rules/</guid><description>
&lt;h2 id="disable-default-rules"&gt;Disable Default Rules&lt;/h2&gt;
&lt;p&gt;Even though Falco provides a quite powerful default ruleset, you sometimes need to disable some of these default &lt;a class='glossary-tooltip' title='Rules are conditions under which an alert should be generated.' data-toggle='tooltip' data-placement='top' href='https://v0-43--falcosecurity.netlify.app/docs/rules/basic-elements/#rules' target='_blank' aria-label='rules'&gt;rules&lt;/a&gt; since they do not work properly in your environment. Luckily Falco offers you multiple possibilities to do so.&lt;/p&gt;
&lt;h3 id="via-falco-configuration-or-parameters"&gt;Via Falco Configuration or Parameters&lt;/h3&gt;
&lt;p&gt;Since Falco 0.38.0, you can control which rules are loaded by adding relevant entries to the &lt;code&gt;rules&lt;/code&gt; section of the &lt;code&gt;falco.yaml&lt;/code&gt; configuration file or by passing appropriate command line parameters. In the &lt;code&gt;rules&lt;/code&gt; section you can add any number of &lt;code&gt;enable&lt;/code&gt; or &lt;code&gt;disable&lt;/code&gt; entries:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;- &lt;span style="color:#008000;font-weight:bold"&gt;enable&lt;/span&gt;:&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;rule&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;&amp;lt;wildcard pattern&amp;gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;- &lt;span style="color:#008000;font-weight:bold"&gt;disable&lt;/span&gt;:&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;rule&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;&amp;lt;wildcard pattern&amp;gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;- &lt;span style="color:#008000;font-weight:bold"&gt;enable&lt;/span&gt;:&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;tag&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;&amp;lt;tag&amp;gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;- &lt;span style="color:#008000;font-weight:bold"&gt;disable&lt;/span&gt;:&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;tag&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;&amp;lt;tag&amp;gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;All the entries are treated as commands and evaluated in order, thus controlling the &lt;code&gt;enabled&lt;/code&gt; status of the loaded rules. For instance, in order to only enable the rules called &lt;code&gt;Netcat Remote Code Execution in Container&lt;/code&gt; and &lt;code&gt;Delete or rename shell history&lt;/code&gt; you can supply the following configuration:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;rules&lt;/span&gt;:&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;- &lt;span style="color:#008000;font-weight:bold"&gt;disable&lt;/span&gt;:&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;rule&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#b44"&gt;&amp;#34;*&amp;#34;&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;- &lt;span style="color:#008000;font-weight:bold"&gt;enable&lt;/span&gt;:&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;rule&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;Netcat Remote Code Execution in Container&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;- &lt;span style="color:#008000;font-weight:bold"&gt;enable&lt;/span&gt;:&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;rule&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;Delete or rename shell history&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The above instructs Falco to first disable all rules (regardless of their &lt;code&gt;enabled&lt;/code&gt; status in the files or any override), then enable the Netcat rule and finally enable the deletion rule.&lt;/p&gt;
&lt;p&gt;Alternatively, this configuration can be supplied on the Falco command line by using the &lt;code&gt;-o&lt;/code&gt; option.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;falco -o &lt;span style="color:#b44"&gt;&amp;#34;rules[].enable.tag=network&amp;#34;&lt;/span&gt; -o &lt;span style="color:#b44"&gt;&amp;#34;rules[].enable.rule=Directory traversal monitored file&amp;#34;&lt;/span&gt; -o &lt;span style="color:#b44"&gt;&amp;#34;rules[].enable.rule=k8s_*&amp;#34;&lt;/span&gt; -o &lt;span style="color:#b44"&gt;&amp;#34;rules[].disable.rule=k8s_noisy_rule&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;In the above example, all the rules tagged &lt;code&gt;network&lt;/code&gt; are enabled, the &lt;code&gt;Directory traversal monitored file&lt;/code&gt; will also be enabled alongside any rule matching the pattern &lt;code&gt;k8s_*&lt;/code&gt;, and then the rule &lt;code&gt;k8s_noisy_rule&lt;/code&gt; will be disabled; all of this happens regardless of any &lt;code&gt;enabled&lt;/code&gt; status specified in the rules files. If both yaml configuration and &lt;code&gt;-o&lt;/code&gt; options are specified, the CLI options are applied last.&lt;/p&gt;
&lt;p&gt;These parameters can also be specified as Helm chart value (&lt;code&gt;extraArgs&lt;/code&gt;) if you are deploying Falco via the official Helm chart.&lt;/p&gt;
&lt;h3 id="macros"&gt;Via existing Macros&lt;/h3&gt;
&lt;p&gt;Most of the default rules offer some kind of &lt;code&gt;user_*&lt;/code&gt; &lt;a class='glossary-tooltip' title='Macros are rule condition snippets that can be re-used inside rules and even other macros.' data-toggle='tooltip' data-placement='top' href='https://v0-43--falcosecurity.netlify.app/docs/rules/basic-elements/#macros' target='_blank' aria-label='macros'&gt;macros&lt;/a&gt; which are already part of the rule conditions. These &lt;code&gt;user_*&lt;/code&gt; macros are usually set to &lt;code&gt;(never_true)&lt;/code&gt; or &lt;code&gt;(always_true)&lt;/code&gt; which basically enables or disables the regarding rule. Now if you want to disable a default rule (e.g. &lt;code&gt;Read sensitive file trusted after startup&lt;/code&gt;), you just have to override the rule's &lt;code&gt;user_*&lt;/code&gt; macro (&lt;code&gt;user_known_read_sensitive_files_activities&lt;/code&gt; in this case) inside your custom Falco configuration.&lt;/p&gt;
&lt;p&gt;Example for your custom Falco configuration (note the &lt;code&gt;(always_true)&lt;/code&gt; condition):&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;- &lt;span style="color:#008000;font-weight:bold"&gt;macro&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;user_known_read_sensitive_files_activities&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;condition&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;(always_true)&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Please note again that the order of the specified configuration file matters! The last defined macro with the same name wins.&lt;/p&gt;
&lt;h3 id="via-custom-rule-definition"&gt;Via Custom Rule Definition&lt;/h3&gt;
&lt;div class="card card-sm pageinfo pageinfo-warning my-4"&gt;
&lt;div class="card-body"&gt;
&lt;div class="card-text"&gt;
&lt;p&gt;The &lt;code&gt;enabled&lt;/code&gt; attribute used as an override is deprecated and it will be removed in Falco &lt;code&gt;1.0.0&lt;/code&gt;. Use the &lt;a href="https://v0-43--falcosecurity.netlify.app/docs/rules/overriding/#enabling-a-disabled-rule"&gt;&lt;code&gt;override.enabled&lt;/code&gt; attribute&lt;/a&gt; instead.
Please note that the &lt;code&gt;enabled&lt;/code&gt; key is only deprecated when used as an override! So a rule like this is perfectly legit:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;- &lt;span style="color:#008000;font-weight:bold"&gt;rule&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;legit_rule&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;desc&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;legit rule description&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;condition&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;evt.type=open&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;output&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;user=%user.name command=%proc.cmdline file=%fd.name&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;priority&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;INFO&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;enabled&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;false&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Last but not the least, you can just disable a rule that is enabled by default using the &lt;code&gt;enabled: false&lt;/code&gt; rule property.
This is especially useful for rules which do not provide a &lt;code&gt;user_*&lt;/code&gt; macro in the default condition.&lt;/p&gt;
&lt;p&gt;Ensure that the custom configuration file loads after the default configuration file. You can configure the right order using multiple &lt;code&gt;-r&lt;/code&gt; parameters or directly inside the falco configuration file &lt;code&gt;falco.yaml&lt;/code&gt; through &lt;code&gt;rules_files&lt;/code&gt;. If you are using the official Helm chart, then configure the order with the &lt;code&gt;falco.rules_files&lt;/code&gt; value.&lt;/p&gt;
&lt;p&gt;For example to disable the &lt;code&gt;User mgmt binaries&lt;/code&gt; default rule in &lt;code&gt;/etc/falco/falco_rules.yaml&lt;/code&gt; define a custom rule in &lt;code&gt;/etc/falco/rules.d/custom-rules.yaml&lt;/code&gt;:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;- &lt;span style="color:#008000;font-weight:bold"&gt;rule&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;User mgmt binaries&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;enabled&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;false&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;At the same time, disabled rules can be re-enabled by using the &lt;code&gt;enabled: true&lt;/code&gt; rule property. For instance, the &lt;code&gt;Change thread namespace&lt;/code&gt; rule in &lt;code&gt;/etc/falco/falco_rules.yaml&lt;/code&gt; that is disabled by default, can be manually enabled with:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;- &lt;span style="color:#008000;font-weight:bold"&gt;rule&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;Change thread namespace&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;enabled&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;true&lt;/span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="tags"&gt;Rule Tags&lt;/h2&gt;
&lt;p&gt;As of 0.6.0, rules have an optional set of &lt;a class='glossary-tooltip' title='Labels that can be attached to the rules, allow to select the subset of rules to enable.' data-toggle='tooltip' data-placement='top' href='https://v0-43--falcosecurity.netlify.app/docs/rules/controlling-rules/#tags' target='_blank' aria-label='tags'&gt;tags&lt;/a&gt; that are used to categorize the ruleset into groups of related rules. Here's an example:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;- &lt;span style="color:#008000;font-weight:bold"&gt;rule&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;File Open by Privileged Container&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;desc&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;Any open by a privileged container. Exceptions are made for known trusted images.&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;condition&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;(open_read or open_write) and container and container.privileged=true and not trusted_containers&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;output&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;File opened for read/write by privileged container | user=%user.name command=%proc.cmdline file=%fd.name&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;priority&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;WARNING&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#008000;font-weight:bold"&gt;tags&lt;/span&gt;:&lt;span style="color:#bbb"&gt; &lt;/span&gt;[container, cis]&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;In this case, the rule &amp;quot;File Open by Privileged Container&amp;quot; has been given the tags &amp;quot;container&amp;quot; and &amp;quot;cis&amp;quot;. If the tags key is not present for a given rule or the list is empty, a rule has no tags.&lt;/p&gt;
&lt;p&gt;Here's how you can use tags:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;You can use the &lt;code&gt;-T &amp;lt;tag&amp;gt;&lt;/code&gt; argument to disable rules having a given tag. &lt;code&gt;-T&lt;/code&gt; can be specified multiple times. For example, to skip all rules with the &amp;quot;filesystem&amp;quot; and &amp;quot;cis&amp;quot; tags you would run falco with &lt;code&gt;falco -T filesystem -T cis ...&lt;/code&gt;. &lt;code&gt;-T&lt;/code&gt; can not be specified with &lt;code&gt;-t&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;You can use the &lt;code&gt;-t &amp;lt;tag&amp;gt;&lt;/code&gt; argument to &lt;em&gt;only&lt;/em&gt; run those rules having a given tag. &lt;code&gt;-t&lt;/code&gt; can be specified multiple times. For example, to only run those rules with the &amp;quot;filesystem&amp;quot; and &amp;quot;cis&amp;quot; tags, you would run falco with &lt;code&gt;falco -t filesystem -t cis ...&lt;/code&gt;. &lt;code&gt;-t&lt;/code&gt; can not be specified with &lt;code&gt;-T&lt;/code&gt; or &lt;code&gt;-D &amp;lt;pattern&amp;gt;&lt;/code&gt; (disable rules by rule name regex).&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="tags-for-current-falco-ruleset"&gt;Tags for Current Falco Ruleset&lt;/h3&gt;
&lt;p&gt;We've also gone through the default ruleset and tagged all the rules with an initial set of tags. Here are the tags we've used:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style="text-align: left"&gt;Tag&lt;/th&gt;
&lt;th style="text-align: left"&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;filesystem&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;The rule relates to reading/writing files&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;software_mgmt&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;The rule relates to any software/package management tool like rpm, dpkg, etc.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;process&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;The rule relates to starting a new process or changing the state of a current process&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;database&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;The rule relates to databases&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;host&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;The rule &lt;em&gt;only&lt;/em&gt; works outside of containers&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;shell&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;The rule specifically relates to starting shells&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;container&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;The rule &lt;em&gt;only&lt;/em&gt; works inside containers&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;cis&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;The rule is related to the CIS Docker benchmark&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;users&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;The rule relates to management of users or changing the identity of a running process&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;network&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;The rule relates to network activity&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Rules can have multiple tags if they relate to multiple of the above. Every rule in the falco ruleset currently has at least one tag.&lt;/p&gt;
&lt;div class="alert alert-primary" role="alert"&gt;
&lt;h4 class="alert-heading"&gt;Ignored system calls&lt;/h4&gt;
&lt;p&gt;For performance reasons, some system calls are currently discarded before Falco processes them.&lt;br&gt;
You can see the complete list by running falco with &lt;code&gt;-i&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;If you'd like to run Falco against all events, including system calls in the above list,&lt;br&gt;
you can run Falco with the &lt;code&gt;-A&lt;/code&gt; flag.&lt;/p&gt;
&lt;p&gt;For more information, see &lt;a href="https://v0-43--falcosecurity.netlify.app/docs/rules/supported-events"&gt;supported events&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;</description></item></channel></rss>