| Seq | Timestamp | Type | Name | Duration |
|---|---|---|---|---|
| 0/0 | 2026/08/17 20:46 | flow | patch-triage |
0mArgs:null Results: {
"EnableConfigs": null,
"FocusSymbols": [],
"KMSANReasoning": "The patch adds a size check (`size \u003e KMALLOC_MAX_SIZE`) in `___kmalloc_large_node` to prevent allocations that exceed the maximum allowed size. This prevents potential integer overflows, out-of-bounds issues, or page allocator warnings/crashes when requesting excessively large memory blocks. These types of bugs are effectively caught by KASAN and standard kernel bug detectors. The patch does not introduce any new structures, uninitialized memory reads, or kernel-to-user info-leaks that would require KMSAN to detect.",
"NeedsKMSAN": false,
"Reasoning": "The patch adds a size check to `___kmalloc_large_node` to prevent allocations larger than `KMALLOC_MAX_SIZE`. This modifies core memory allocation logic and is reachable. No specific focus symbols are provided as this is a generic hot-path function.",
"WorthFuzzing": true
} |
| 1/1 | 2026/08/17 20:46 | action | read-patch-diff |
0mArgs:null Results: {
"PatchDiff": "commit a575e4a7160e14d0054158b615739d04768ba09e\nAuthor: syz-cluster \u003ctriage@syzkaller.com\u003e\nDate: Mon Aug 17 20:46:00 2026 +0000\n\n syz-cluster: applied patch under review\n\ndiff --git a/mm/slub.c b/mm/slub.c\nindex 0337e60db5ace..a3071f4ef1945 100644\n--- a/mm/slub.c\n+++ b/mm/slub.c\n@@ -5263,7 +5263,12 @@ static void *___kmalloc_large_node(size_t size, gfp_t flags, int node)\n {\n \tstruct page *page;\n \tvoid *ptr = NULL;\n-\tunsigned int order = get_order(size);\n+\tunsigned int order;\n+\n+\tif (size \u003e KMALLOC_MAX_SIZE)\n+\t\treturn NULL;\n+\n+\torder = get_order(size);\n \n \tif (unlikely(flags \u0026 GFP_SLAB_BUG_MASK))\n \t\tflags = kmalloc_fix_flags(flags);\n"
} |
| 2/1 | 2026/08/17 20:46 | agent | patch-evaluator |
0mModel:best-expensive Args: null Results: {
"EnableConfigs": null,
"FocusSymbols": [],
"Reasoning": "The patch adds a size check to `___kmalloc_large_node` to prevent allocations larger than `KMALLOC_MAX_SIZE`. This modifies core memory allocation logic and is reachable. No specific focus symbols are provided as this is a generic hot-path function.",
"WorthFuzzing": true
}Instruction: You are an expert Linux kernel maintainer. Your job is to review a provided patch series and determine if it makes functional changes to the kernel that should be fuzzed. IMPORTANT: The changes have ALREADY been applied and committed as the HEAD commit in your workspace. Do NOT rely on your internal knowledge of the kernel. You must actively use your code access tools to examine the actual source code and confirm any assumptions. Return WorthFuzzing=false if the patch only contains: - Modifications to Documentation/, Kconfig files, or code comments. - Purely decorative changes, such as logging (e.g., pr_err, printk) or tracepoints. - Changes to numeric constants or macros that do not functionally alter execution flow. - Code paths that are impossible to reach in virtualized environments like GCE or QEMU, even when utilizing software-emulated hardware (e.g., usb gadget, mac80211_hwsim). - Code in vendor-specific PCIe switch, SmartNIC, or GPU drivers (e.g., mlxsw, pds_core, qed, ionic, amdgpu) that require physical PCIe hardware cards not emulated in standard QEMU. - Driver .remove, .shutdown, or pci_unregister_driver teardown callbacks (e.g., igb_remove) that are executed only during PCI hot-unplug or sysfs driver unbind operations. If it modifies reachable core kernel logic, drivers, or architectures, use your code search tools to verify the code can be executed, then return WorthFuzzing=true. When returning WorthFuzzing=true, you MUST ALSO: 1. Extract any specific kernel functions that should be heavily fuzzed into FocusSymbols. Avoid listing generic hot-path functions to prevent skewed test distributions. Prefer non-static, non-inlined API entrypoint functions over internal static helper functions (which are inlined by the compiler and do not have distinct symbol addresses). 2. Identify any specific CONFIG_ options required to properly test this new/modified feature. Go and look into the Kconfig files and check for ifdefs around the code, do not make assumptions. Also check "depends on" lines in Kconfig to include any non-standard parent subsystem configs needed for Kbuild to compile the code statically into vmlinux. List them in the EnableConfigs output array, and DO NOT add a 'CONFIG_' prefix (e.g., return "NET_IPV4" instead of "CONFIG_NET_IPV4"). Prefer calling several tools at the same time to save round-trips. Use set-results tool to provide results of the analysis. It must be called exactly once before the final reply. Ignore results of this tool. Prompt: For your convenience, here is the diff of the changes:
commit a575e4a7160e14d0054158b615739d04768ba09e
Author: syz-cluster <triage@syzkaller.com>
Date: Mon Aug 17 20:46:00 2026 +0000
syz-cluster: applied patch under review
diff --git a/mm/slub.c b/mm/slub.c
index 0337e60db5ace..a3071f4ef1945 100644
--- a/mm/slub.c
+++ b/mm/slub.c
@@ -5263,7 +5263,12 @@ static void *___kmalloc_large_node(size_t size, gfp_t flags, int node)
{
struct page *page;
void *ptr = NULL;
- unsigned int order = get_order(size);
+ unsigned int order;
+
+ if (size > KMALLOC_MAX_SIZE)
+ return NULL;
+
+ order = get_order(size);
if (unlikely(flags & GFP_SLAB_BUG_MASK))
flags = kmalloc_fix_flags(flags);
|
| 3/2 | 2026/08/17 20:46 | llm | patch-evaluator |
0mModel:gemini-3.1-pro-preview Args: null Results: null Tokens: input: 2007 output: 33 thoughts: 172 Thoughts: **Analyzing a Kernel Memory Allocation Patch** Okay, so there's a patch in `mm/slub.c`. It looks like it's touching `___kmalloc_large_node`, which is a low-level function related to large kernel memory allocations. Specifically, it's adding a `size` check before calculating the allocation order: `if (size > KMALLOC_MAX_SIZE) return NULL;`. This is prime fuzzing territory. Any modification to a core memory allocation function like this screams for thorough testing. Wait a second, let me clarify: `___kmalloc_large_node` isn't the direct entry point. It's an internal helper function called by `kmalloc_large_node` and `kmalloc_large`. That means I need to assess how reachable it is, and what configuration options control its inclusion. Clearly, `mm/slub.c` is only compiled if `CONFIG_SLUB` is enabled, so that's a prerequisite. Now I need to quickly examine the code and determine exactly when `___kmalloc_large_node` is called and how those calling functions handle the potential `NULL` return. I'll need to check how it's used within `mm/slub.c` itself. |
| 4/2 | 2026/08/17 20:46 | tool | grepper |
0mArgs:{
"Expression": "___kmalloc_large_node",
"PathPrefix": "mm/slub.c"
}Results: {
"Output": "mm/slub.c=5253=unsigned int kmem_cache_sheaf_size(struct slab_sheaf *sheaf)\n--\nmm/slub.c-5261- */\nmm/slub.c:5262:static void *___kmalloc_large_node(size_t size, gfp_t flags, int node)\nmm/slub.c-5263-{\n--\nmm/slub.c=5298=void *__kmalloc_large_noprof(size_t size, gfp_t flags)\nmm/slub.c-5299-{\nmm/slub.c:5300:\tvoid *ret = ___kmalloc_large_node(size, flags, NUMA_NO_NODE);\nmm/slub.c-5301-\n--\nmm/slub.c=5308=void *__kmalloc_large_node_noprof(size_t size, gfp_t flags, int node)\nmm/slub.c-5309-{\nmm/slub.c:5310:\tvoid *ret = ___kmalloc_large_node(size, flags, node);\nmm/slub.c-5311-\n"
} |
| 5/2 | 2026/08/17 20:46 | llm | patch-evaluator |
0mModel:gemini-3.1-pro-preview Args: null Results: null Tokens: input: 2796 output: 29 thoughts: 76 Thoughts: Okay, here's my take on those thoughts, framed as my own mental processing: **Examining the kmalloc_large Functions** Right, so I'm looking at this `___kmalloc_large_node` function. Straight away, I see it's marked as `static` and internal. That's fine; it's the implementation detail. But the interesting part is *how* it's accessed. Looks like `__kmalloc_large_noprof` and `__kmalloc_large_node_noprof` are the exposed entry points. I know those names; they ring a bell. I need to figure out if `__kmalloc_large_noprof` is actually exported. That will be the key to understanding its usage, if it's visible outside of this compilation unit or not. This is where I start tracing the code paths for more context. |
| 6/2 | 2026/08/17 20:46 | tool | grepper |
0mArgs:{
"Expression": "__kmalloc_large_noprof",
"PathPrefix": ""
}Results: {
"Output": "include/linux/slab.h=969=void *__kmalloc_cache_node_noprof(struct kmem_cache *s, gfp_t gfpflags,\n--\ninclude/linux/slab.h-972-\ninclude/linux/slab.h:973:void *__kmalloc_large_noprof(size_t size, gfp_t flags)\ninclude/linux/slab.h-974-\t\t\t\t__assume_page_alignment __alloc_size(1);\n--\ninclude/linux/slab.h=979=static __always_inline __alloc_size(1) void *_kmalloc_noprof(size_t size, gfp_t flags, kmalloc_token_t token)\n--\ninclude/linux/slab.h-984-\t\tif (size \u003e KMALLOC_MAX_CACHE_SIZE)\ninclude/linux/slab.h:985:\t\t\treturn __kmalloc_large_noprof(size, flags);\ninclude/linux/slab.h-986-\n--\nmm/slub.c=5262=static void *___kmalloc_large_node(size_t size, gfp_t flags, int node)\n--\nmm/slub.c-5297-\nmm/slub.c:5298:void *__kmalloc_large_noprof(size_t size, gfp_t flags)\nmm/slub.c-5299-{\n--\nmm/slub.c-5305-}\nmm/slub.c:5306:EXPORT_SYMBOL(__kmalloc_large_noprof);\nmm/slub.c-5307-\n"
} |
| 7/2 | 2026/08/17 20:46 | llm | patch-evaluator |
0mModel:gemini-3.1-pro-preview Args: null Results: null Tokens: input: 3510 output: 31 thoughts: 68 Thoughts: Here's my take on those thoughts: **Examining Kernel Memory Allocation Functions** Okay, so I see that both `__kmalloc_large_noprof` and `__kmalloc_large_node_noprof` are indeed exported. That's good to know. But hold on a second... just want to make sure I have the exact function name right. Yep, double-checking, it looks like `__kmalloc_large_noprof` is the correct name. Now, let me just quickly double check the specifics on `__kmalloc_large_node_noprof`. It's important to understand the subtle differences and implications of each of these variants for the specific scenario I'm considering. Need to be precise. |
| 8/2 | 2026/08/17 20:46 | tool | grepper |
0mArgs:{
"Expression": "__kmalloc_large_node_noprof",
"PathPrefix": ""
}Results: {
"Output": "include/linux/slab.h=973=void *__kmalloc_large_noprof(size_t size, gfp_t flags)\n--\ninclude/linux/slab.h-975-\ninclude/linux/slab.h:976:void *__kmalloc_large_node_noprof(size_t size, gfp_t flags, int node)\ninclude/linux/slab.h-977-\t\t\t\t__assume_page_alignment __alloc_size(1);\n--\ninclude/linux/slab.h=1184=static __always_inline __alloc_size(1) void *_kmalloc_node_noprof(size_t size, gfp_t flags, int node, kmalloc_token_t token)\n--\ninclude/linux/slab.h-1189-\t\tif (size \u003e KMALLOC_MAX_CACHE_SIZE)\ninclude/linux/slab.h:1190:\t\t\treturn __kmalloc_large_node_noprof(size, flags, node);\ninclude/linux/slab.h-1191-\n--\nmm/slub.c=5306=EXPORT_SYMBOL(__kmalloc_large_noprof);\nmm/slub.c-5307-\nmm/slub.c:5308:void *__kmalloc_large_node_noprof(size_t size, gfp_t flags, int node)\nmm/slub.c-5309-{\n--\nmm/slub.c-5315-}\nmm/slub.c:5316:EXPORT_SYMBOL(__kmalloc_large_node_noprof);\nmm/slub.c-5317-\n--\nmm/slub.c=5319=void *__do_kmalloc_node(kmem_buckets *b, gfp_t flags, int node,\n--\nmm/slub.c-5326-\tif (unlikely(size \u003e KMALLOC_MAX_CACHE_SIZE)) {\nmm/slub.c:5327:\t\tret = __kmalloc_large_node_noprof(size, flags, node);\nmm/slub.c-5328-\t\ttrace_kmalloc(ac-\u003ecaller_addr, ret, size,\n"
} |
| 9/2 | 2026/08/17 20:46 | llm | patch-evaluator |
0mModel:gemini-3.1-pro-preview Args: null Results: null Tokens: input: 4328 output: 33 thoughts: 417 Thoughts: **My Analysis of the Kernel Memory Allocation Patch** Okay, so I'm looking at this patch related to kernel memory allocators. My initial gut reaction is to *not* directly fuzz core memory allocators like these – they're hot paths, and fuzzing them directly tends to skew test distributions. But, the prompt *specifically* tells me to "Extract any specific kernel functions that should be heavily fuzzed into `FocusSymbols`." and to avoid generic hot-path functions. Alright, so I need to filter out the generic stuff. I see it's modifying `___kmalloc_large_node`. That’s a generic hot-path function... which is not what I am supposed to list. But, are there *any* non-hot-path functions in play here? No, it looks like it's just this one. So, my initial thought is that the `FocusSymbols` list should be empty. The prompt is very explicit: "When returning `WorthFuzzing=true`, you MUST ALSO: 1. Extract any specific kernel functions that should be heavily fuzzed into FocusSymbols...". If there are *no* suitable functions, then empty it is, even if it feels odd. Let me just confirm there aren't any weird config dependencies to check. `CONFIG_SLUB` is the default, and there aren't any other obvious configuration knobs. Good. Now, let's circle back to `WorthFuzzing`. The prompt says, "If it modifies reachable core kernel logic, drivers, or architectures, use your code search tools to verify the code can be executed, then return `WorthFuzzing=true`." Hmm, this *does* modify core kernel logic. Hold on, let me zoom in on the specific change, it's just this line: ```c if (size > KMALLOC_MAX_SIZE) return NULL; ``` This *is* a functional change! It's an important check to prevent a potential memory allocation bug when `size` is too large. That seems like a pretty important defensive measure. Therefore, I'm confident in setting `WorthFuzzing=true`. Let me just double-check that `KMALLOC_MAX_SIZE` is, in fact, defined and accessible... |
| 10/2 | 2026/08/17 20:46 | tool | grepper |
0mArgs:{
"Expression": "KMALLOC_MAX_SIZE",
"PathPrefix": "include/linux/slab.h"
}Results: {
"Output": "include/linux/slab.h=640=static inline unsigned int arch_slab_minalign(void)\n--\ninclude/linux/slab.h-669-/* Maximum allocatable size */\ninclude/linux/slab.h:670:#define KMALLOC_MAX_SIZE\t(1UL \u003c\u003c KMALLOC_SHIFT_MAX)\ninclude/linux/slab.h-671-/* Maximum size for which we actually use a slab cache */\n"
} |
| 11/2 | 2026/08/17 20:46 | llm | patch-evaluator |
0mModel:gemini-3.1-pro-preview Args: null Results: null Tokens: input: 5380 output: 86 thoughts: 91 Thoughts: **My Assessment of the Patch's Fuzzing Potential** Okay, so I've examined the code change and it's pretty straightforward. The critical part is that this patch introduces a size check within `___kmalloc_large_node` to limit the maximum allocation size to `KMALLOC_MAX_SIZE`. It's definitely a modification to core memory allocation, which *always* piques my interest from a fuzzing perspective. The fact that it's reachable is important – we can trigger this check and expose it to fuzzing inputs. Given this, I'm confident we can categorize this as `WorthFuzzing: true`. The `FocusSymbols` list will remain empty, as this is a general hot-path function; nothing specific jumps out as needing targeted fuzzing. Similarly, since the function is generalized, the `EnableConfigs` list is empty, because no special configurations are required to expose the change. The `Reasoning` is really the crux of it: a size check within a core memory allocation function is reachable and general. |
| 12/2 | 2026/08/17 20:46 | tool | set-results |
0mArgs:{
"EnableConfigs": [],
"FocusSymbols": [],
"Reasoning": "The patch adds a size check to `___kmalloc_large_node` to prevent allocations larger than `KMALLOC_MAX_SIZE`. This modifies core memory allocation logic and is reachable. No specific focus symbols are provided as this is a generic hot-path function.",
"WorthFuzzing": true
}Results: {
"EnableConfigs": null,
"FocusSymbols": [],
"Reasoning": "The patch adds a size check to `___kmalloc_large_node` to prevent allocations larger than `KMALLOC_MAX_SIZE`. This modifies core memory allocation logic and is reachable. No specific focus symbols are provided as this is a generic hot-path function.",
"WorthFuzzing": true
} |
| 13/1 | 2026/08/17 20:46 | action | If |
0mArgs:{
"WorthFuzzing": true
}Results: null |
| 14/2 | 2026/08/17 20:46 | agent | kmsan-evaluator |
0mModel:best-expensive Args: null Results: {
"KMSANReasoning": "The patch adds a size check (`size \u003e KMALLOC_MAX_SIZE`) in `___kmalloc_large_node` to prevent allocations that exceed the maximum allowed size. This prevents potential integer overflows, out-of-bounds issues, or page allocator warnings/crashes when requesting excessively large memory blocks. These types of bugs are effectively caught by KASAN and standard kernel bug detectors. The patch does not introduce any new structures, uninitialized memory reads, or kernel-to-user info-leaks that would require KMSAN to detect.",
"NeedsKMSAN": false
}Instruction: You are an expert Linux kernel security engineer specializing in kernel memory
error detectors (KASAN and KMSAN). Your job is to review the provided patch series and
determine if the code changes justify spawning a dedicated KMSAN (KernelMemorySanitizer)
fuzzing session in addition to standard KASAN fuzzing.
CRITICAL DISTINCTION BETWEEN KASAN AND KMSAN:
- Standard KASAN kernel builds (upstream-apparmor-kasan.config) already enable
a comprehensive suite of debugging tools and sanitizers, including KASAN
(out-of-bounds accesses, use-after-free, double free, invalid free), LOCKDEP
(locking bugs and deadlocks), UB-sanitizers, and memory corruption checks.
- KMSAN (KernelMemorySanitizer) detects reads of UNINITIALIZED memory (stack, heap,
or page allocations) and kernel-to-user memory info-leaks.
Rule: THERE IS NO SENSE IN RUNNING A KMSAN SESSION IF A BUG CAN BE CAUGHT BY KASAN,
LOCKDEP, OR OTHER STANDARD BUG DETECTORS.
A dedicated KMSAN fuzzing session incurs significant resource costs. You must ONLY
set NeedsKMSAN=true if the code changes introduce or expose UNINITIALIZED MEMORY risks
that are detected ONLY by KMSAN.
Look holistically at the patch series and surrounding code. Even if no direct
uninitialized field accesses or new buffer allocations are added in the diff itself,
a patch may alter control flow, bounds checking, or data length calculations in ways
that change how the rest of the code operates on existing buffers (e.g. allowing
uninitialized stack/heap memory to be read, copied to user space, or used in control
flow). Do not hesitate to use your code access tools to inspect the surrounding code,
called functions, and callers.
Set NeedsKMSAN=true ONLY IF the patch introduces or modifies:
1. Kernel structures sent to user space (via copy_to_user, put_user, netlink skb
attributes, ioctl output arguments, socket options, or BPF buffers) where fields
or structure padding might not be fully initialized/zeroed.
2. Conditional logic or branching that depends on potentially uninitialized variables
or struct fields.
3. Allocation or initialization of complex data structures where uninitialized fields
could be read later in reachable code paths.
4. Bounds checks, lengths, or logic in a way that allows surrounding code to access
uninitialized bytes of existing buffers.
Set NeedsKMSAN=false IF:
- The code changes primarily risk out-of-bounds access, array overflows, NULL pointer
dereferences, locking deadlocks, or use-after-free bugs (these are already caught
by KASAN, LOCKDEP, or standard bug detectors).
- All stack/heap structures touched or introduced by the patch are fully zeroed
or initialized (e.g. using = {0}, memset, kzalloc) before being read or copied.
- The patch does not introduce any risk of uninitialized memory usage or info-leaks.
Use your code access tools to inspect the surrounding code if necessary, then provide
detailed KMSANReasoning contrasting KASAN vs KMSAN applicability for this patch.
Prefer calling several tools at the same time to save round-trips.
Use set-results tool to provide results of the analysis.
It must be called exactly once before the final reply.
Ignore results of this tool.
Prompt: For your convenience, here is the diff of the changes:
commit a575e4a7160e14d0054158b615739d04768ba09e
Author: syz-cluster <triage@syzkaller.com>
Date: Mon Aug 17 20:46:00 2026 +0000
syz-cluster: applied patch under review
diff --git a/mm/slub.c b/mm/slub.c
index 0337e60db5ace..a3071f4ef1945 100644
--- a/mm/slub.c
+++ b/mm/slub.c
@@ -5263,7 +5263,12 @@ static void *___kmalloc_large_node(size_t size, gfp_t flags, int node)
{
struct page *page;
void *ptr = NULL;
- unsigned int order = get_order(size);
+ unsigned int order;
+
+ if (size > KMALLOC_MAX_SIZE)
+ return NULL;
+
+ order = get_order(size);
if (unlikely(flags & GFP_SLAB_BUG_MASK))
flags = kmalloc_fix_flags(flags);
|
| 15/3 | 2026/08/17 20:46 | llm | kmsan-evaluator |
0mModel:gemini-3.1-pro-preview Args: null Results: null Tokens: input: 2004 output: 139 thoughts: 441 Thoughts: **My Assessment of the Patch** Okay, so this patch is a straightforward modification to `___kmalloc_large_node` within `mm/slub.c`. My initial thought is that it's adding a simple size check: `if (size > KMALLOC_MAX_SIZE) return NULL;`. This is aimed at mitigating potential out-of-bounds access, allocation failures, or size overflows – a good, defensive move. It effectively prevents the allocation of memory exceeding the defined `KMALLOC_MAX_SIZE`. I quickly considered if this change introduces any risk of uninitialized memory usage. However, it seems safe in that regard; the code simply returns `NULL` if the size is too large. No new memory is being allocated or used in a potentially unsafe state. Looking at the patch itself confirms this. It's a bounds check on the `size` parameter *before* calling `get_order(size)`. This prevents `get_order` from potentially receiving a ridiculously large size, and it stops attempts to allocate an extremely large chunk that might fail anyway. The core concern here is that an overly large `size` passed to `get_order` could lead to a crash or warning down the line, likely in the page allocator or during the `get_order` call itself. It's not a direct introduction of uninitialized memory, but a preventative measure against a related bug. Since this seems to be a proactive measure to prevent certain scenarios from even occurring, and not a direct impact to memory being used, it's very unlikely that any KMSAN coverage is needed. These types of issues are usually detected by KASAN or routine kernel testing (syzkaller, sans KMSAN, for example). No uninitialized memory read or information leakage is created here, as best I can see. Therefore, after a thorough review, I'm confident in setting `NeedsKMSAN=false`. |
| 16/3 | 2026/08/17 20:46 | tool | set-results |
0mArgs:{
"KMSANReasoning": "The patch adds a size check (`size \u003e KMALLOC_MAX_SIZE`) in `___kmalloc_large_node` to prevent allocations that exceed the maximum allowed size. This prevents potential integer overflows, out-of-bounds issues, or page allocator warnings/crashes when requesting excessively large memory blocks. These types of bugs are effectively caught by KASAN and standard kernel bug detectors. The patch does not introduce any new structures, uninitialized memory reads, or kernel-to-user info-leaks that would require KMSAN to detect.",
"NeedsKMSAN": false
}Results: {
"KMSANReasoning": "The patch adds a size check (`size \u003e KMALLOC_MAX_SIZE`) in `___kmalloc_large_node` to prevent allocations that exceed the maximum allowed size. This prevents potential integer overflows, out-of-bounds issues, or page allocator warnings/crashes when requesting excessively large memory blocks. These types of bugs are effectively caught by KASAN and standard kernel bug detectors. The patch does not introduce any new structures, uninitialized memory reads, or kernel-to-user info-leaks that would require KMSAN to detect.",
"NeedsKMSAN": false
} |
| Total Calls | Total Tokens | Avg Tokens | Total Duration (Seconds) | Avg Duration (Seconds) |
|---|
| Total Calls | Total Duration (Seconds) | Avg Duration (Seconds) |
|---|