Lucene search
+L

Unity Linux 20.1050e Security Update: kernel (UTSA-2026-102107)

🗓️ 21 Aug 2026 00:00:00Reported by TenableType 
nessus
 nessus
🔗 www.tenable.com👁 6 Views

Buffer overflow in Linux kernel ethtool stats query when stat count changes between ioctl calls.

Related
Refs
Code
#%NASL_MIN_LEVEL 80900
##
# (C) Tenable, Inc.
##

include('compat.inc');

if (description)
{
  script_id(338491);
  script_version("1.1");
  script_set_attribute(attribute:"plugin_modification_date", value:"2026/08/21");

  script_cve_id("CVE-2025-68795");

  script_name(english:"Unity Linux 20.1050e Security Update: kernel (UTSA-2026-102107)");

  script_set_attribute(attribute:"synopsis", value:
"The Unity Linux host is missing one or more security updates.");
  script_set_attribute(attribute:"description", value:
"The Unity Linux 20 host has a package installed that is affected by a vulnerability as referenced in the
UTSA-2026-102107 advisory.

    In the Linux kernel, the following vulnerability has been resolved:

    ethtool: Avoid overflowing userspace buffer on stats query

    The ethtool -S command operates across three ioctl calls:
    ETHTOOL_GSSET_INFO for the size, ETHTOOL_GSTRINGS for the names, and
    ETHTOOL_GSTATS for the values.

    If the number of stats changes between these calls (e.g., due to device
    reconfiguration), userspace's buffer allocation will be incorrect,
    potentially leading to buffer overflow.

    Drivers are generally expected to maintain stable stat counts, but some
    drivers (e.g., mlx5, bnx2x, bna, ksz884x) use dynamic counters, making
    this scenario possible.

    Some drivers try to handle this internally:
    - bnad_get_ethtool_stats() returns early in case stats.n_stats is not
      equal to the driver's stats count.
    - micrel/ksz884x also makes sure not to write anything beyond
      stats.n_stats and overflow the buffer.

    However, both use stats.n_stats which is already assigned with the value
    returned from get_sset_count(), hence won't solve the issue described
    here.

    Change ethtool_get_strings(), ethtool_get_stats(),
    ethtool_get_phy_stats() to not return anything in case of a mismatch
    between userspace's size and get_sset_size(), to prevent buffer
    overflow.
    The returned n_stats value will be equal to zero, to reflect that
    nothing has been returned.

    This could result in one of two cases when using upstream ethtool,
    depending on when the size change is detected:
    1. When detected in ethtool_get_strings():
        # ethtool -S eth2
        no stats available

    2. When detected in get stats, all stats will be reported as zero.

    Both cases are presumably transient, and a subsequent ethtool call
    should succeed.

    Other than the overflow avoidance, these two cases are very evident (no
    output/cleared stats), which is arguably better than presenting
    incorrect/shifted stats.
    I also considered returning an error instead of a silent response, but
    that seems more destructive towards userspace apps.

    Notes:
    - This patch does not claim to fix the inherent race, it only makes sure
      that we do not overflow the userspace buffer, and makes for a more
      predictable behavior.

    - RTNL lock is held during each ioctl, the race window exists between
      the separate ioctl calls when the lock is released.

    - Userspace ethtool always fills stats.n_stats, but it is likely that
      these stats ioctls are implemented in other userspace applications
      which might not fill it. The added code checks that it's not zero,
      to prevent any regressions.

Tenable has extracted the preceding description block directly from the Unity Linux security advisory.

Note that Nessus has not tested for this issue but has instead relied only on the application's self-reported version
number.");
  # https://src.uniontech.com/#/security_advisory_detail?utsa_id=UTSA-2026-102107
  script_set_attribute(attribute:"see_also", value:"http://www.nessus.org/u?662f0fee");
  # https://git.kernel.org/stable/c/3df375a1e75483b7d973c3cc2e46aa374db8428b
  script_set_attribute(attribute:"see_also", value:"http://www.nessus.org/u?10dc9126");
  # https://git.kernel.org/stable/c/4066b5b546293f44cd6d0e84ece6e3ee7ff27093
  script_set_attribute(attribute:"see_also", value:"http://www.nessus.org/u?230e3f42");
  # https://git.kernel.org/stable/c/4afcb985355210e1688560dc47e64b94dad35d71
  script_set_attribute(attribute:"see_also", value:"http://www.nessus.org/u?39a04352");
  # https://git.kernel.org/stable/c/7b07be1ff1cb6c49869910518650e8d0abc7d25f
  script_set_attribute(attribute:"see_also", value:"http://www.nessus.org/u?dabe0378");
  # https://git.kernel.org/stable/c/7bea09f60f2ad5d232e2db8f1c14e850fd3fd416
  script_set_attribute(attribute:"see_also", value:"http://www.nessus.org/u?933b59ab");
  # https://git.kernel.org/stable/c/ca9983bc3a1189bd72f9ae449d925a66b2616326
  script_set_attribute(attribute:"see_also", value:"http://www.nessus.org/u?d68889c5");
  # https://git.kernel.org/stable/c/f9dc0f45d2cd0189ce666288a29d2cc32c2e44d5
  script_set_attribute(attribute:"see_also", value:"http://www.nessus.org/u?8b0ddf90");
  # https://lore.kernel.org/linux-cve-announce/2026011306-CVE-2025-68795-4e3e@gregkh
  script_set_attribute(attribute:"see_also", value:"http://www.nessus.org/u?b1f4e933");
  script_set_attribute(attribute:"see_also", value:"https://nvd.nist.gov/vuln/detail/CVE-2025-68795");
  script_set_attribute(attribute:"see_also", value:"https://security-tracker.debian.org/tracker/CVE-2025-68795");
  script_set_attribute(attribute:"solution", value:
"Update the affected kernel package.");
  script_set_cvss_base_vector("CVSS2#AV:L/AC:L/Au:S/C:C/I:C/A:C");
  script_set_cvss_temporal_vector("CVSS2#E:U/RL:OF/RC:C");
  script_set_cvss3_base_vector("CVSS:3.0/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H");
  script_set_cvss3_temporal_vector("CVSS:3.0/E:U/RL:O/RC:C");
  script_set_attribute(attribute:"cvss_score_source", value:"CVE-2025-68795");

  script_set_attribute(attribute:"exploitability_ease", value:"No known exploits are available");
  script_set_attribute(attribute:"exploit_available", value:"false");

  script_set_attribute(attribute:"vuln_publication_date", value:"2026/01/13");
  script_set_attribute(attribute:"patch_publication_date", value:"2026/08/17");
  script_set_attribute(attribute:"plugin_publication_date", value:"2026/08/21");

  script_set_attribute(attribute:"plugin_type", value:"local");
  script_set_attribute(attribute:"generated_plugin", value:"current");
  script_end_attributes();

  script_category(ACT_GATHER_INFO);
  script_family(english:"Unity Linux Local Security Checks");

  script_copyright(english:"This script is Copyright (C) 2026 and is owned by Tenable, Inc. or an Affiliate thereof.");

  script_dependencies("ssh_get_info2.nasl");
  script_require_keys("Host/local_checks_enabled", "Host/UOS-Server/release", "Host/UOS-Server/rpm-list", "Host/cpu");

  exit(0);
}
include('rpm2.inc');

if (!get_kb_item('Host/local_checks_enabled')) audit(AUDIT_LOCAL_CHECKS_NOT_ENABLED);
var os_product = get_kb_item('installed_os/local/SSH/0/product');
if (isnull(os_product) || 'UOS Server' >!< os_product) audit(AUDIT_OS_NOT, 'UOS Server');
var os_version = get_kb_item('installed_os/local/SSH/0/version');
if (isnull(os_version)) audit(AUDIT_UNKNOWN_APP_VER, 'UOS Server');
if (! preg(pattern:"^(20.1050e)([^0-9]|$)", string:os_version)) audit(AUDIT_OS_NOT, 'UOS Server 20.1050e', 'UOS Server ' + os_version);

if (!get_kb_item('Host/UOS-Server/rpm-list')) audit(AUDIT_PACKAGE_LIST_MISSING);

var cpu = get_kb_item('Host/cpu');
if (isnull(cpu)) audit(AUDIT_UNKNOWN_ARCH);
if ('aarch64' >!< cpu && 'amd64' >!< cpu && 'x86_64' >!< cpu) audit(AUDIT_LOCAL_CHECKS_NOT_IMPLEMENTED, 'UOS Server', cpu);


var constraints = [
  {
    'release': '20',
    'sp': '1050e',
    'pkgs': [
      {'reference':'kernel-4.19.90-2211.5.0.0178.67.uel20', 'sp':'1050e', 'cpu':'aarch64', 'rpm_spec_vers_cmp':TRUE},
      {'reference':'kernel-4.19.90-2211.5.0.0178.67.uel20', 'sp':'1050e', 'cpu':'amd64', 'rpm_spec_vers_cmp':TRUE},
      {'reference':'kernel-4.19.90-2211.5.0.0178.67.uel20', 'sp':'1050e', 'cpu':'x86_64', 'rpm_spec_vers_cmp':TRUE}
    ]
  }
];

var os_release = get_one_kb_item('installed_os/local/SSH/0/release');
var os_sp = get_one_kb_item('Host/*/minor_release');

var flag = 0;
var reference;
var sp;
var _cpu;
var el_string;
var rpm_spec_vers_cmp;
var epoch;
var allowmaj;
var exists_check;
var cves;
foreach var constraint ( constraints ) {
  # Check that the target release is equal to the affected release
  if (!empty_or_null(constraint['release'])){
    if (constraint['release'] != os_release) continue;
  }
  if (!empty_or_null(constraint['sp'])){
    if (constraint['sp'] != os_sp) continue;
  }
  foreach var pkg ( constraint['pkgs'] ) {
    reference = NULL;
    sp = NULL;
    _cpu = NULL;
    el_string = NULL;
    rpm_spec_vers_cmp = NULL;
    epoch = NULL;
    allowmaj = NULL;
    exists_check = NULL;
    cves = NULL;
    if (!empty_or_null(pkg['reference'])) reference = pkg['reference'];
    if (!empty_or_null(pkg['sp'])) sp = pkg['sp'];
    if (!empty_or_null(pkg['cpu'])) _cpu = pkg['cpu'];
    if (!empty_or_null(pkg['el_string'])) el_string = pkg['el_string'];
    if (!empty_or_null(pkg['rpm_spec_vers_cmp'])) rpm_spec_vers_cmp = pkg['rpm_spec_vers_cmp'];
    if (!empty_or_null(pkg['epoch'])) epoch = pkg['epoch'];
    if (!empty_or_null(pkg['allowmaj'])) allowmaj = pkg['allowmaj'];
    if (!empty_or_null(pkg['exists_check'])) exists_check = pkg['exists_check'];
    if (!empty_or_null(pkg['cves'])) cves = pkg['cves'];
    if (reference &&
        ## (no known rpm to check OR known rpm_exists)
        (!exists_check || rpm_exists(rpm:exists_check)) &&
        rpm_check(sp:sp, cpu:_cpu, reference:reference, epoch:epoch, el_string:el_string, rpm_spec_vers_cmp:rpm_spec_vers_cmp, allowmaj:allowmaj, cves:cves)) flag++;
  }
}


if (flag)
{
  security_report_v4(
      port       : 0,
      severity   : SECURITY_WARNING,
      extra      : rpm_report_get()
  );
  exit(0);
}
else
{
  var tested = pkg_tests_get();
  if (tested) audit(AUDIT_PACKAGE_NOT_AFFECTED, tested);
  else audit(AUDIT_PACKAGE_NOT_INSTALLED, 'kernel');
}

Data

Build on a solid foundation with Vulners data

We provide the essential building blocks for cybersecurity solutions with comprehensive, structured, and constantly updated vulnerability and exploits data

Api

Power your application with Vulners API

The Vulners REST API offers reliable, high-performance access to vulnerability intelligence, with 99.9% SLA uptime and CDN-backed data delivery for seamless global access

App

Assess and manage vulnerabilities with Vulners tools

Built on top of Vulners' database and SDK, end-user solutions give security professionals and developers lightweight and powerful tools for vulnerability remediation

21 Aug 2026 00:00Current
6.1Medium risk
Vulners AI Score6.1
CVSS 3.17.8
EPSS0.00148
SSVC
6