Lucene search
+L

Unity Linux 20.1050a Security Update: kernel (UTSA-2026-098806)

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

Deadlock and link starvation in Linux kernel n_gsm outgoing data path (UTSA-2026-098806).

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

include('compat.inc');

if (description)
{
  script_id(340409);
  script_version("1.2");
  script_set_attribute(attribute:"plugin_modification_date", value:"2026/08/28");

  script_cve_id("CVE-2022-50116");

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

  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-098806 advisory.

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

    tty: n_gsm: fix deadlock and link starvation in outgoing data path

    The current implementation queues up new control and user packets as needed
    and processes this queue down to the ldisc in the same code path.
    That means that the upper and the lower layer are hard coupled in the code.
    Due to this deadlocks can happen as seen below while transmitting data,
    especially during ldisc congestion. Furthermore, the data channels starve
    the control channel on high transmission load on the ldisc.

    Introduce an additional control channel data queue to prevent timeouts and
    link hangups during ldisc congestion. This is being processed before the
    user channel data queue in gsm_data_kick(), i.e. with the highest priority.
    Put the queue to ldisc data path into a workqueue and trigger it whenever
    new data has been put into the transmission queue. Change
    gsm_dlci_data_sweep() accordingly to fill up the transmission queue until
    TX_THRESH_HI. This solves the locking issue, keeps latency low and provides
    good performance on high data load.
    Note that now all packets from a DLCI are removed from the internal queue
    if the associated DLCI was closed. This ensures that no data is sent by the
    introduced write task to an already closed DLCI.

    BUG: spinlock recursion on CPU#0, test_v24_loop/124
     lock: serial8250_ports+0x3a8/0x7500, .magic: dead4ead, .owner: test_v24_loop/124, .owner_cpu: 0
    CPU: 0 PID: 124 Comm: test_v24_loop Tainted: G           O      5.18.0-rc2 #3
    Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 1.15.0-1 04/01/2014
    Call Trace:
     <IRQ>
     dump_stack_lvl+0x34/0x44
     do_raw_spin_lock+0x76/0xa0
     _raw_spin_lock_irqsave+0x72/0x80
     uart_write_room+0x3b/0xc0
     gsm_data_kick+0x14b/0x240 [n_gsm]
     gsmld_write_wakeup+0x35/0x70 [n_gsm]
     tty_wakeup+0x53/0x60
     tty_port_default_wakeup+0x1b/0x30
     serial8250_tx_chars+0x12f/0x220
     serial8250_handle_irq.part.0+0xfe/0x150
     serial8250_default_handle_irq+0x48/0x80
     serial8250_interrupt+0x56/0xa0
     __handle_irq_event_percpu+0x78/0x1f0
     handle_irq_event+0x34/0x70
     handle_fasteoi_irq+0x90/0x1e0
     __common_interrupt+0x69/0x100
     common_interrupt+0x48/0xc0
     asm_common_interrupt+0x1e/0x40
    RIP: 0010:__do_softirq+0x83/0x34e
    Code: 2a 0a ff 0f b7 ed c7 44 24 10 0a 00 00 00 48 c7 c7 51 2a 64 82 e8 2d
    e2 d5 ff 65 66 c7 05 83 af 1e 7e 00 00 fb b8 ff ff ff ff <49> c7 c2 40 61
    80 82 0f bc c5 41 89 c4 41 83 c4 01 0f 84 e6 00 00
    RSP: 0018:ffffc90000003f98 EFLAGS: 00000286
    RAX: 00000000ffffffff RBX: 0000000000000000 RCX: 0000000000000000
    RDX: 0000000000000000 RSI: ffffffff82642a51 RDI: ffffffff825bb5e7
    RBP: 0000000000000200 R08: 00000008de3271a8 R09: 0000000000000000
    R10: 0000000000000001 R11: 0000000000000000 R12: 0000000000000000
    R13: 0000000000000030 R14: 0000000000000000 R15: 0000000000000000
     ? __do_softirq+0x73/0x34e
     irq_exit_rcu+0xb5/0x100
     common_interrupt+0xa4/0xc0
     </IRQ>
     <TASK>
     asm_common_interrupt+0x1e/0x40
    RIP: 0010:_raw_spin_unlock_irqrestore+0x2e/0x50
    Code: 00 55 48 89 fd 48 83 c7 18 53 48 89 f3 48 8b 74 24 10 e8 85 28 36 ff
    48 89 ef e8 cd 58 36 ff 80 e7 02 74 01 fb bf 01 00 00 00 <e8> 3d 97 33 ff
    65 8b 05 96 23 2b 7e 85 c0 74 03 5b 5d c3 0f 1f 44
    RSP: 0018:ffffc9000020fd08 EFLAGS: 00000202
    RAX: 0000000000000000 RBX: 0000000000000246 RCX: 0000000000000000
    RDX: 0000000000000004 RSI: ffffffff8257fd74 RDI: 0000000000000001
    RBP: ffff8880057de3a0 R08: 00000008de233000 R09: 0000000000000000
    R10: 0000000000000001 R11: 0000000000000000 R12: 0000000000000000
    R13: 0000000000000100 R14: 0000000000000202 R15: ffff8880057df0b8
     ? _raw_spin_unlock_irqrestore+0x23/0x50
     gsmtty_write+0x65/0x80 [n_gsm]
     n_tty_write+0x33f/0x530
     ? swake_up_all+0xe0/0xe0
     file_tty_write.constprop.0+0x1b1/0x320
     ? n_tty_flush_buffer+0xb0/0xb0
     new_sync_write+0x10c/0x190
     vfs_write+0x282/0x310
     ksys_write+0x68/0xe0
     do_syscall_64+0x3b/0x90
     entry_SYSCALL_64_after_hwframe+0x44/0xae
    RIP: 0033:0x7f3e5e35c15c
    Code: 8b 7c 24 08 89 c5 e8 c5 ff ff ff 89 ef 89 44 24
    ---truncated---

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-098806
  script_set_attribute(attribute:"see_also", value:"http://www.nessus.org/u?2a3f56e0");
  # https://lore.kernel.org/linux-cve-announce/2025061809-CVE-2022-50116-bf10@gregkh
  script_set_attribute(attribute:"see_also", value:"http://www.nessus.org/u?41c71259");
  script_set_attribute(attribute:"see_also", value:"https://nvd.nist.gov/vuln/detail/CVE-2022-50116");
  script_set_attribute(attribute:"solution", value:
"Update the affected kernel package.");
  script_set_cvss_base_vector("CVSS2#AV:L/AC:L/Au:S/C:N/I:N/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:N/I:N/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-2022-50116");

  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:"2024/05/22");
  script_set_attribute(attribute:"patch_publication_date", value:"2026/08/10");
  script_set_attribute(attribute:"plugin_publication_date", value:"2026/08/26");

  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.1050a)([^0-9]|$)", string:os_version)) audit(AUDIT_OS_NOT, 'UOS Server 20.1050a', '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 && 'loongarch64' >!< cpu && 'x86_64' >!< cpu) audit(AUDIT_LOCAL_CHECKS_NOT_IMPLEMENTED, 'UOS Server', cpu);


var constraints = [
  {
    'release': '20',
    'sp': '1050a',
    'pkgs': [
      {'reference':'kernel-4.19.0-91.82.132.24.uelc20', 'sp':'1050a', 'cpu':'aarch64', 'rpm_spec_vers_cmp':TRUE},
      {'reference':'kernel-4.19.0-91.82.132.24.uelc20', 'sp':'1050a', 'cpu':'amd64', 'rpm_spec_vers_cmp':TRUE},
      {'reference':'kernel-4.19.0-91.82.132.24.uelc20', 'sp':'1050a', 'cpu':'loongarch64', 'rpm_spec_vers_cmp':TRUE},
      {'reference':'kernel-4.19.0-91.82.132.24.uelc20', 'sp':'1050a', '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

28 Aug 2026 00:00Current
6.3Medium risk
Vulners AI Score6.3
CVSS 3.15.5
EPSS0.00126
3