---
id: "CVE-2026-99111"
kind: "vulnerability"
aliases: ["CVE-2026-99111"]
title: "Linux kernel SMB client: concurrent writes during O_TRUNC silently lose data"
severity: "unknown"
cvss: null
epss: null
exploited: false
status: "open"
category: "runtime"
products: []
ecosystems: []
tags: ["cifs", "file-servers", "linux-kernel", "runtime", "smb-client"]
not_affected_if: ["no-cifs-mounts"]
published_at: "2026-10-28T11:17:30+00:00"
first_seen_at: "2026-10-28T11:32:34+00:00"
updated_at: "2026-10-28T11:37:43+00:00"
sources: [{"source": "nvd", "url": "https://nvd.nist.gov/vuln/detail/CVE-2026-99111", "first_seen_at": "2026-10-28T11:32:34+00:00"}]
---

# Linux kernel SMB client: concurrent writes during O_TRUNC silently lose data

The Linux kernel's CIFS/SMB client could discard freshly written pages when a buffered write raced with a truncate that used O_TRUNC, because the flush, server truncate and local resize ran without the needed locks. The fix takes the inode and invalidate locks across the whole truncate sequence, so the risk is silent data loss rather than code execution.

_Summary, check and fix written by a model from the sources; labelled as such._

## Timeline

- 2026-10-28T11:32:34+00:00 nvd https://nvd.nist.gov/vuln/detail/CVE-2026-99111

## From the sources

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

smb: client: fix data corruption with concurrent writes and O_TRUNC

cifs_do_truncate() flushes dirty pages with filemap_write_and_wait()
and truncates the file on the server, but in the old code both
operations ran without holding i_rwsem or invalidate_lock.  A
concurrent buffered write via netfs_perform_write() -- which only
needs i_rwsem shared -- could dirty new pages after the flush but
before the local truncation, and those pages would be silently
discarded by cifs_setsize() -> truncate_pagecache().

Fix by acquiring inode_lock (exclusive i_rwsem) and
filemap_invalidate_lock at the top of cifs_do_truncate(), so the
entire flush-truncate-resize sequence is atomic with respect to:

  - buffered writes (blocked by exclusive i_rwsem, since
    netfs_start_io_write takes i_rwsem shared),
  - read page faults (blocked by exclusive invalidate_lock, since
    filemap_fault takes it shared),
  - writeback collection (blocked by netfs_wb_begin/netfs_wb_end
    around the server truncate and local resize, since
    netfs_writepages also acquires the wb lock).

---

_Free to read at a human pace. An API with keys and an MCP server are in preparation; early access: hello@infrastack.ai_
