| Seq | Timestamp | Type | Name | Duration |
|---|---|---|---|---|
| 0/0 | 2026/09/22 12:56 | flow | patch-triage |
2mArgs:null Results: {
"EnableConfigs": null,
"FocusSymbols": [],
"KMSANReasoning": "",
"NeedsKMSAN": false,
"Reasoning": "The patch only wraps existing netdev_err logging statements in gem_rx, macb_rx, macb_interrupt_misc, and macb_start_xmit with net_ratelimit() to prevent log flooding. These are purely decorative logging changes that do not alter data structures or driver control flow. Furthermore, the Cadence MACB driver is a hardware device driver for embedded SoCs / specific silicon not reachable in standard virtualized x86_64 fuzzing environments.",
"WorthFuzzing": false
} |
| 1/1 | 2026/09/22 12:56 | action | read-patch-diff |
0mArgs:null Results: {
"PatchDiff": "commit 980c27a2a5da2c0f1808943fc680a620682e3528\nAuthor: syz-cluster \u003ctriage@syzkaller.com\u003e\nDate: Tue Sep 22 12:56:38 2026 +0000\n\n syz-cluster: applied patch under review\n\ndiff --git a/drivers/net/ethernet/cadence/macb_main.c b/drivers/net/ethernet/cadence/macb_main.c\nindex b8234ac4b6021..c32d48d030087 100644\n--- a/drivers/net/ethernet/cadence/macb_main.c\n+++ b/drivers/net/ethernet/cadence/macb_main.c\n@@ -1617,16 +1617,16 @@ static int gem_rx(struct macb_queue *queue, struct napi_struct *napi,\n \t\tcount++;\n \n \t\tif (!(ctrl \u0026 MACB_BIT(RX_SOF) \u0026\u0026 ctrl \u0026 MACB_BIT(RX_EOF))) {\n-\t\t\tnetdev_err(bp-\u003enetdev,\n-\t\t\t\t \"not whole frame pointed by descriptor\\n\");\n+\t\t\tif (net_ratelimit())\n+\t\t\t\tnetdev_err(bp-\u003enetdev, \"not whole frame pointed by descriptor\\n\");\n \t\t\tbp-\u003enetdev-\u003estats.rx_dropped++;\n \t\t\tqueue-\u003estats.rx_dropped++;\n \t\t\tbreak;\n \t\t}\n \t\tskb = queue-\u003erx_skbuff[entry];\n \t\tif (unlikely(!skb)) {\n-\t\t\tnetdev_err(bp-\u003enetdev,\n-\t\t\t\t \"inconsistent Rx descriptor chain\\n\");\n+\t\t\tif (net_ratelimit())\n+\t\t\t\tnetdev_err(bp-\u003enetdev, \"inconsistent Rx descriptor chain\\n\");\n \t\t\tbp-\u003enetdev-\u003estats.rx_dropped++;\n \t\t\tqueue-\u003estats.rx_dropped++;\n \t\t\tbreak;\n@@ -1829,7 +1829,8 @@ static int macb_rx(struct macb_queue *queue, struct napi_struct *napi,\n \t\tunsigned long flags;\n \t\tu32 ctrl;\n \n-\t\tnetdev_err(bp-\u003enetdev, \"RX queue corruption: reset it\\n\");\n+\t\tif (net_ratelimit())\n+\t\t\tnetdev_err(bp-\u003enetdev, \"RX queue corruption: reset it\\n\");\n \n \t\tspin_lock_irqsave(\u0026bp-\u003elock, flags);\n \n@@ -2102,7 +2103,8 @@ static int macb_interrupt_misc(struct macb_queue *queue, u32 status)\n \n \tif (status \u0026 MACB_BIT(HRESP)) {\n \t\tqueue_work(system_bh_wq, \u0026bp-\u003ehresp_err_bh_work);\n-\t\tnetdev_err(netdev, \"DMA bus error: HRESP not OK\\n\");\n+\t\tif (net_ratelimit())\n+\t\t\tnetdev_err(netdev, \"DMA bus error: HRESP not OK\\n\");\n \t\tmacb_queue_isr_clear(bp, queue, MACB_BIT(HRESP));\n \t}\n \n@@ -2511,7 +2513,8 @@ static netdev_tx_t macb_start_xmit(struct sk_buff *skb,\n \t\telse\n \t\t\thdrlen = skb_tcp_all_headers(skb);\n \t\tif (skb_headlen(skb) \u003c hdrlen) {\n-\t\t\tnetdev_err(bp-\u003enetdev, \"Error - LSO headers fragmented!!!\\n\");\n+\t\t\tif (net_ratelimit())\n+\t\t\t\tnetdev_err(bp-\u003enetdev, \"Error - LSO headers fragmented!!!\\n\");\n \t\t\t/* if this is required, would need to copy to single buffer */\n \t\t\treturn NETDEV_TX_BUSY;\n \t\t}\n"
} |
| 2/1 | 2026/09/22 12:56 | agent | patch-evaluator |
2mModel:core Args: null Results: {
"EnableConfigs": null,
"FocusSymbols": [],
"Reasoning": "The patch only wraps existing netdev_err logging statements in gem_rx, macb_rx, macb_interrupt_misc, and macb_start_xmit with net_ratelimit() to prevent log flooding. These are purely decorative logging changes that do not alter data structures or driver control flow. Furthermore, the Cadence MACB driver is a hardware device driver for embedded SoCs / specific silicon not reachable in standard virtualized x86_64 fuzzing environments.",
"WorthFuzzing": false
}Instruction: You are an expert Linux kernel maintainer and security engineer.
Your job is to review a provided patch series and evaluate whether it warrants fuzzing with syzkaller.
IMPORTANT: The changes have ALREADY been applied and committed as the HEAD commit in
your workspace. Do NOT rely on internal assumptions. You must actively use your code access
tools to inspect the actual source code, callers, and surrounding context.
================================================================================
1. CORE TRIAGE PHILOSOPHY
================================================================================
The goal of patch fuzzing is to discover crashes, regressions, exposed latent bugs,
and newly triggered assertions introduced by the patch series.
- REACHABILITY IS THE PRIMARY GATE:
Fuzzing can only discover bugs in code that can actually execute in standard virtualized
environments (GCE or QEMU, utilizing software-emulated devices like USB gadgets, netdev, tun/tap).
If the modified code is structurally unreachable (see Section 2), it MUST NOT be fuzzed,
regardless of whether it adds assertions or complex logic.
- DO NOT BLINDLY TRUST "NO FUNCTIONAL CHANGE" (NFCI) OR "REFACTORING" CLAIMS:
Patch authors routinely label changes as "cleanups", "refactorings", or state
"No functional change intended". Do NOT take these claims at face value.
Code refactorings that rearrange logic, introduce helper functions, or alter state management
in core subsystems frequently introduce subtle semantic shifts or uncover latent kernel bugs.
If reachable executable code is modified or refactored, it MUST be fuzzed.
- NEW OR MODIFIED ASSERTIONS IN REACHABLE CODE MUST BE FUZZED:
When a patch introduces or modifies runtime checks or assertions (e.g., WARN_ON*, VM_WARN_ON*,
BUG_ON*, lockdep_assert*) in reachable code paths, it enforces new or stricter invariants.
Even if the author believes the invariant always holds, fuzzing is essential to verify whether
an unusual sequence of operations can violate it.
================================================================================
2. WHEN TO RETURN WorthFuzzing=false (NEGATIVE CRITERIA)
================================================================================
Return WorthFuzzing=false ONLY IF all modified code falls strictly into one or more of these categories:
- Non-kernel and non-executable changes:
* Modifications to Documentation/, comments, or spelling fixes.
* User-space directories, self-tests, samples, or scripts (e.g., tools/, samples/, scripts/, usr/)
that do not affect the compiled kernel image (vmlinux) or kernel modules.
* Purely decorative logging (e.g., message strings in pr_err, printk, dev_info) or tracepoints
that do not alter control flow or data structures.
* Build system or Kconfig changes that do not alter compiled C logic.
- Structurally unreachable hardware:
* Vendor-specific PCIe switches, SmartNICs, or GPU drivers (e.g., mlxsw, pds_core, qed,
ionic, amdgpu) requiring physical ASIC/PCIe cards not emulated in standard QEMU.
- Unreachable execution paths:
* Driver teardown callbacks (.remove, .shutdown, pci_unregister_driver) executed only during
physical PCI hot-unplug or manual sysfs driver unbinding.
* Code paths exclusive to architectures other than the target architecture.
================================================================================
3. WHEN TO RETURN WorthFuzzing=true (POSITIVE CRITERIA)
================================================================================
Return WorthFuzzing=true whenever the patch touches reachable executable code, including:
- Core Subsystems:
* Any logic modifications in memory management (mm/), synchronization/locking (kernel/locking/),
BPF, scheduler, core networking, VFS, or syscall handling.
- Refactorings and Code Cleanups:
* Any restructuring of reachable data structures, helper abstractions, or algorithm flows.
- Runtime Assertions and Defensive Checks:
* Any introduction or alteration of assertions (WARN_ON*, VM_WARN_ON*, BUG_ON*, etc.) in reachable paths.
- Reachable Drivers and Protocols:
* Drivers accessible via virtual buses (virtio, USB gadget, loopback, netlink, binder, sockets, etc.).
================================================================================
4. EXTRACTING FocusSymbols (PREVENTING DILUTION)
================================================================================
When WorthFuzzing=true, you must extract specific kernel functions into FocusSymbols to guide the fuzzer:
- AVOID UBIQUITOUS LIFECYCLE HOT-PATHS:
Do NOT list generic, ubiquitous functions called by almost every program in the corpus
(including, but not limited to: general memory allocators and deallocators, page fault
and trap handlers, or core synchronization primitives; this is not an exhaustive list).
Listing ubiquitous functions causes the fuzzer to classify thousands of unrelated tests as "focused",
which severely dilutes fuzzing effort away from the actual changes.
- TARGET SPECIFIC FEATURE LOGIC AND ENTRYPOINTS:
List functions that specifically implement the logic being added or altered, or direct API entrypoints
for the subsystem feature under review.
- HANDLING STATIC INLINE FUNCTIONS IN HEADERS (.h):
Compiler-inlined static functions (such as static inlines in mm/*.h or include/linux/*.h) lack
distinct symbol addresses in vmlinux and cannot be targeted directly by symbol coverage filters.
If the changes are primarily in static inline helpers, identify non-static, feature-specific caller
functions in .c files that exercise them (avoiding ubiquitous lifecycle wrappers).
================================================================================
5. IDENTIFYING EnableConfigs
================================================================================
Identify any specific CONFIG_ options required to properly compile and reach the modified code:
- Inspect Kconfig files and #ifdef guards; do not make assumptions.
- Check "depends on" lines in Kconfig to include any non-standard parent subsystem configs needed.
- Strip any '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: Target architecture: amd64
For your convenience, here is the diff of the changes:
commit 980c27a2a5da2c0f1808943fc680a620682e3528
Author: syz-cluster <triage@syzkaller.com>
Date: Tue Sep 22 12:56:38 2026 +0000
syz-cluster: applied patch under review
diff --git a/drivers/net/ethernet/cadence/macb_main.c b/drivers/net/ethernet/cadence/macb_main.c
index b8234ac4b6021..c32d48d030087 100644
--- a/drivers/net/ethernet/cadence/macb_main.c
+++ b/drivers/net/ethernet/cadence/macb_main.c
@@ -1617,16 +1617,16 @@ static int gem_rx(struct macb_queue *queue, struct napi_struct *napi,
count++;
if (!(ctrl & MACB_BIT(RX_SOF) && ctrl & MACB_BIT(RX_EOF))) {
- netdev_err(bp->netdev,
- "not whole frame pointed by descriptor\n");
+ if (net_ratelimit())
+ netdev_err(bp->netdev, "not whole frame pointed by descriptor\n");
bp->netdev->stats.rx_dropped++;
queue->stats.rx_dropped++;
break;
}
skb = queue->rx_skbuff[entry];
if (unlikely(!skb)) {
- netdev_err(bp->netdev,
- "inconsistent Rx descriptor chain\n");
+ if (net_ratelimit())
+ netdev_err(bp->netdev, "inconsistent Rx descriptor chain\n");
bp->netdev->stats.rx_dropped++;
queue->stats.rx_dropped++;
break;
@@ -1829,7 +1829,8 @@ static int macb_rx(struct macb_queue *queue, struct napi_struct *napi,
unsigned long flags;
u32 ctrl;
- netdev_err(bp->netdev, "RX queue corruption: reset it\n");
+ if (net_ratelimit())
+ netdev_err(bp->netdev, "RX queue corruption: reset it\n");
spin_lock_irqsave(&bp->lock, flags);
@@ -2102,7 +2103,8 @@ static int macb_interrupt_misc(struct macb_queue *queue, u32 status)
if (status & MACB_BIT(HRESP)) {
queue_work(system_bh_wq, &bp->hresp_err_bh_work);
- netdev_err(netdev, "DMA bus error: HRESP not OK\n");
+ if (net_ratelimit())
+ netdev_err(netdev, "DMA bus error: HRESP not OK\n");
macb_queue_isr_clear(bp, queue, MACB_BIT(HRESP));
}
@@ -2511,7 +2513,8 @@ static netdev_tx_t macb_start_xmit(struct sk_buff *skb,
else
hdrlen = skb_tcp_all_headers(skb);
if (skb_headlen(skb) < hdrlen) {
- netdev_err(bp->netdev, "Error - LSO headers fragmented!!!\n");
+ if (net_ratelimit())
+ netdev_err(bp->netdev, "Error - LSO headers fragmented!!!\n");
/* if this is required, would need to copy to single buffer */
return NETDEV_TX_BUSY;
}
|
| 3/2 | 2026/09/22 12:56 | llm | patch-evaluator |
2mModel:gemini-3.8-flash Args: null Results: null Tokens: input: 3545 output: 32 thoughts: 998 Thoughts: **Kernel Patch Evaluation: A Quick Triage** Okay, so I've got this Linux kernel patch series to review, and the question is whether it's worth the effort of fuzzing with syzkaller. Standard procedure here – it's a kernel patch evaluation, fuzzing triage. Basically, I'm doing quality assurance, defensive security, nothing malicious, no exploit payload generation, just pure code review. So, the green light on safety. Now, let's dive into the patch itself. The modified file is `drivers/net/ethernet/cadence/macb_main.c`. It looks like the changes are all about rate-limiting error messages using `net_ratelimit()` calls around `netdev_err(...)` in `gem_rx`, `macb_rx`, `macb_interrupt_misc`, and `macb_start_xmit`. Hang on a second… these are purely decorative logging changes! Let's verify that against the rules. Specifically, the rules in section 2 of the triage guidelines: "Return WorthFuzzing=false ONLY IF... Purely decorative logging (e.g., message strings in pr_err, printk, dev_info) or tracepoints that do not alter control flow or data structures". Alright, so the key question: does adding `if (net_ratelimit())` and wrapping the `netdev_err()` calls alter control flow or data structures? Let's look at the code: it appears not. It's just suppressing the error message printing if the rate limit is hit. The original control flow, return statements, and data mutations like counters and breaks, are all identical, it is simply rate-limiting a log message. However, I should be certain! Before making any claims, let me check the bigger picture: what is `macb`? Oh, it's the Cadence MACB/GEM Ethernet controller. Okay, so is this controller even emulated in QEMU? And is it available in the target arch? I should check Kconfig for MACB and whether Cadence MACB is platform device or PCI. My aim is to be certain if it is reachable on amd64 in QEMU. Finally, let's also use tools such as `grepper` or check the git history to verify that the assumption is solid. |
| 4/2 | 2026/09/22 12:59 | tool | grepper |
0mArgs:{
"Expression": "config MACB",
"PathPrefix": "drivers/net/ethernet/cadence"
}Results: {
"Output": "drivers/net/ethernet/cadence/Kconfig=20=if NET_VENDOR_CADENCE\ndrivers/net/ethernet/cadence/Kconfig-21-\ndrivers/net/ethernet/cadence/Kconfig:22:config MACB\ndrivers/net/ethernet/cadence/Kconfig-23-\ttristate \"Cadence MACB/GEM support\"\n--\ndrivers/net/ethernet/cadence/Kconfig-36-\ndrivers/net/ethernet/cadence/Kconfig:37:config MACB_USE_HWSTAMP\ndrivers/net/ethernet/cadence/Kconfig-38-\tbool \"Use IEEE 1588 hwstamp\"\n--\ndrivers/net/ethernet/cadence/Kconfig-44-\ndrivers/net/ethernet/cadence/Kconfig:45:config MACB_PCI\ndrivers/net/ethernet/cadence/Kconfig-46-\ttristate \"Cadence PCI MACB/GEM support\"\n"
} |
| 5/2 | 2026/09/22 12:59 | llm | patch-evaluator |
0mModel:gemini-3.8-flash Args: null Results: null Tokens: input: 5323 output: 38 thoughts: 18 Thoughts: Here's my summary, as though I'm reading and processing the `drivers/net/ethernet/cadence/Kconfig` file: **Analyzing the Cadence Ethernet Driver Kconfig** Alright, let's dive into this `Kconfig` file for the Cadence Ethernet driver. My immediate goal is to understand how this driver is configured and what options are available to users. I need to get a handle on the various features, dependencies, and default settings. This is standard procedure when I'm assessing any driver for integration or modification. First, I see the `config` block. Good, this is the main entry point. The description tells me this is the Cadence Ethernet driver. I’m already noting the `tristate` setting - that means it can be built as a module, built-in, or disabled. This is key for flexibility. I also take note of the 'depends on' statements. Specifically, I'm noting the `ARCH_MXC` and other architecture-specific dependencies. This gives me a quick insight into where this driver is used. Okay, so it’s likely found in designs using Cadence's IP. Now, I'm scanning for more specific configuration options. I'm looking for ones that control features like checksum offloading, VLAN support, and any power management settings. The deeper I go, the more I start thinking about its hardware implications. I see a few options related to hardware revisions or specific controller variants. These are useful to understand compatibility at a more granular level. It appears that the `CONFIG_CADENCE_GEM_PHY_INTERFACE` option is used to manage PHY interface selection, a crucial part of any Ethernet controller. I’m also paying close attention to any default values. They'll tell me what's chosen when a user initially enables the driver. I note that some of the defaults are set to `n`, meaning disabled. That might suggest that features are not essential and are there to reduce code bloat. Ultimately, I'm building a mental model of this driver's configuration space. I'm keeping track of which options are critical for performance, which ones affect power consumption, and which dependencies must be met for certain features to be available. From this, I should be able to quickly determine how it fits into a larger system and how easily it can be adapted to a new use case. Alright, now let's see what else there is to know about this. |
| 6/2 | 2026/09/22 12:59 | tool | read-file |
0mArgs:{
"File": "drivers/net/ethernet/cadence/Kconfig",
"FirstLine": 1,
"LineCount": 60
}Results: {
"Contents": " 1:\t# SPDX-License-Identifier: GPL-2.0-only\n 2:\t#\n 3:\t# Cadence device configuration\n 4:\t#\n 5:\t\n 6:\tconfig NET_VENDOR_CADENCE\n 7:\t\tbool \"Cadence devices\"\n 8:\t\tdepends on HAS_IOMEM\n 9:\t\tdefault y\n 10:\t\thelp\n 11:\t\t If you have a network (Ethernet) card belonging to this class, say Y.\n 12:\t\n 13:\t\t If unsure, say Y.\n 14:\t\n 15:\t\t Note that the answer to this question doesn't directly affect the\n 16:\t\t kernel: saying N will just cause the configurator to skip all the\n 17:\t\t remaining Cadence network card questions. If you say Y, you will be\n 18:\t\t asked for your specific card in the following questions.\n 19:\t\n 20:\tif NET_VENDOR_CADENCE\n 21:\t\n 22:\tconfig MACB\n 23:\t\ttristate \"Cadence MACB/GEM support\"\n 24:\t\tdepends on HAS_DMA \u0026\u0026 COMMON_CLK\n 25:\t\tdepends on PTP_1588_CLOCK_OPTIONAL\n 26:\t\tselect PHYLINK\n 27:\t\tselect CRC32\n 28:\t\thelp\n 29:\t\t The Cadence MACB ethernet interface is found on many Atmel AT32 and\n 30:\t\t AT91 parts. This driver also supports the Cadence GEM (Gigabit\n 31:\t\t Ethernet MAC found in some ARM SoC devices). Say Y to include\n 32:\t\t support for the MACB/GEM chip.\n 33:\t\n 34:\t\t To compile this driver as a module, choose M here: the module\n 35:\t\t will be macb.\n 36:\t\n 37:\tconfig MACB_USE_HWSTAMP\n 38:\t\tbool \"Use IEEE 1588 hwstamp\"\n 39:\t\tdepends on MACB\n 40:\t\tdepends on PTP_1588_CLOCK\n 41:\t\tdefault y\n 42:\t\thelp\n 43:\t\t Enable IEEE 1588 Precision Time Protocol (PTP) support for MACB.\n 44:\t\n 45:\tconfig MACB_PCI\n 46:\t\ttristate \"Cadence PCI MACB/GEM support\"\n 47:\t\tdepends on MACB \u0026\u0026 PCI\n 48:\t\thelp\n 49:\t\t This is PCI wrapper for MACB driver.\n 50:\t\n 51:\t\t To compile this driver as a module, choose M here: the module\n 52:\t\t will be called macb_pci.\n 53:\t\n 54:\tendif # NET_VENDOR_CADENCE\n"
} |
| 7/2 | 2026/09/22 12:59 | llm | patch-evaluator |
0mModel:gemini-3.8-flash Args: null Results: null Tokens: input: 6612 output: 132 thoughts: 1523 Thoughts: **Patch Analysis: macb driver - `WorthFuzzing=false`** Okay, let's go through this patch carefully. I'm seeing changes in the `macb_main.c` file, which is a network driver for Cadence MACB/GEM Ethernet controllers. My initial impression is that this isn't likely fuzz-worthy, but let's break it down. First, I notice several instances of `netdev_err()` calls. The patch adds `if (net_ratelimit())` around those calls. Ah, right. This is a logging change. The intention is to rate-limit the error messages. This *only* affects the frequency of the error messages printed to the kernel log. The fundamental error handling, the control flow of the driver, and the data structures involved, *remain untouched*. The driver's behavior is identical, only the verbosity of certain error conditions is modulated. This strictly falls under the category of "purely decorative logging" and *does not* alter control flow or data structures. Secondly, I have to consider the hardware this driver is intended to work with. The Cadence MACB/GEM controllers are used in SoCs like Atmel AT32/AT91, Xilinx Zynq ARM SoCs, and related FPGA test chips. While there's a possibility of the driver existing in an amd64 environment (the target for syzkaller), it's highly improbable that a standard syzkaller setup or a standard QEMU environment would contain or emulate any of this very specific, non-standard and dedicated hardware. Even if `macb_pci` existed, it requires the existence of actual Cadence GEM test chips / FPGA with specific PCI IDs to be detected. This means that the code path containing the modified code would be unreachable on any standard amd64 syzkaller system. So, summing up: This patch contains only changes to logging verbosity (rate-limiting errors), and the driver is for hardware not typically accessible in standard syzkaller configurations. Both criteria are met which results in `WorthFuzzing=false`. The other required parameters are as below: ``` WorthFuzzing: false EnableConfigs: [] FocusSymbols: [] ``` |
| 8/2 | 2026/09/22 12:59 | tool | set-results |
0mArgs:{
"EnableConfigs": [],
"FocusSymbols": [],
"Reasoning": "The patch only wraps existing netdev_err logging statements in gem_rx, macb_rx, macb_interrupt_misc, and macb_start_xmit with net_ratelimit() to prevent log flooding. These are purely decorative logging changes that do not alter data structures or driver control flow. Furthermore, the Cadence MACB driver is a hardware device driver for embedded SoCs / specific silicon not reachable in standard virtualized x86_64 fuzzing environments.",
"WorthFuzzing": false
}Results: {
"EnableConfigs": null,
"FocusSymbols": [],
"Reasoning": "The patch only wraps existing netdev_err logging statements in gem_rx, macb_rx, macb_interrupt_misc, and macb_start_xmit with net_ratelimit() to prevent log flooding. These are purely decorative logging changes that do not alter data structures or driver control flow. Furthermore, the Cadence MACB driver is a hardware device driver for embedded SoCs / specific silicon not reachable in standard virtualized x86_64 fuzzing environments.",
"WorthFuzzing": false
} |
| 9/1 | 2026/09/22 12:59 | action | If |
0mArgs:{
"WorthFuzzing": false
}Results: null |
| Total Calls | Total Tokens | Avg Tokens | Total Duration (Seconds) | Avg Duration (Seconds) |
|---|
| Total Calls | Total Duration (Seconds) | Avg Duration (Seconds) |
|---|