← Back to CVE Explorer

CVE-2026-99131

Full vulnerability record from the local CVENow database.

Description

In the Linux kernel, the following vulnerability has been resolved: xfs: fix capability check in xfs An user reported a bug where he managed to evade group's quota by changing a file's gid to a different group id the same user belonged to, even though quotas were enforced on both gids and the file's size was big enough to exceed the quota's hardlimit. Commit eba0549bc7d1 replaced a capable() call by a has_capability_noaudit() to prevent unnecessary selinux audit messages. Turns out that both calls have slightly different semantics even though their documentation seems similar. Where in a nutshell: capable() - Tests the task's effective credentials has_ns_capability_noaudit() - Tests the task's real credentials This most of the time has no practical difference but in some cases like changing attrs (specifically group id in this case) through a NFS client this will allow the quota code to use XFS_QMOPT_FORCE_RES, effectively bypassing quota accounting checks. Using instead ns_capable_noaudit() should fix this issue and prevent selinux audit messages. This also fix the remaining calls to has_capability_noaudit()

Severity
Not scored
CVSS score
Not available
Vulnerability status
Received
Source identifier
416baaa9-dc9f-4396-8d5f-8c081fb06d67
Published
2026-10-28 11:17:32.917000
Last modified
2026-10-28 11:17:32.917000
View original CVE JSON
{
  "id": "CVE-2026-99131",
  "sourceIdentifier": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
  "published": "2026-10-28T11:17:32.917",
  "lastModified": "2026-10-28T11:17:32.917",
  "vulnStatus": "Received",
  "cveTags": [],
  "descriptions": [
    {
      "lang": "en",
      "value": "In the Linux kernel, the following vulnerability has been resolved:\n\nxfs: fix capability check in xfs\n\nAn user reported a bug where he managed to evade group's quota\nby changing a file's gid to a different group id the same user\nbelonged to, even though quotas were enforced on both gids and the\nfile's size was big enough to exceed the quota's hardlimit.\n\nCommit eba0549bc7d1 replaced a capable() call by a\nhas_capability_noaudit() to prevent unnecessary selinux audit messages.\nTurns out that both calls have slightly different semantics even though\ntheir documentation seems similar. Where in a nutshell:\n\ncapable() - Tests the task's effective credentials\nhas_ns_capability_noaudit() - Tests the task's real credentials\n\nThis most of the time has no practical difference but in some cases like\nchanging attrs (specifically group id in this case) through a NFS client\nthis will allow the quota code to use XFS_QMOPT_FORCE_RES, effectively\nbypassing quota accounting checks.\n\nUsing instead ns_capable_noaudit() should fix this issue and prevent\nselinux audit messages.\n\nThis also fix the remaining calls to has_capability_noaudit()"
    }
  ],
  "affected": [
    {
      "source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
      "affectedData": [
        {
          "vendor": "Linux",
          "product": "Linux",
          "defaultStatus": "unaffected",
          "programFiles": [
            "fs/xfs/xfs_fsmap.c",
            "fs/xfs/xfs_ioctl.c",
            "fs/xfs/xfs_iops.c"
          ],
          "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
          "versions": [
            {
              "version": "eba0549bc7d100691c13384b774346b8aa9cf9a9",
              "lessThan": "19a1a22029ad3ae3604c763af6bd1195cb73648f",
              "versionType": "git",
              "status": "affected"
            },
            {
              "version": "eba0549bc7d100691c13384b774346b8aa9cf9a9",
              "lessThan": "7809ac0161c7c5f52ed348fb1ec683b2b454a83e",
              "versionType": "git",
              "status": "affected"
            },
            {
              "version": "eba0549bc7d100691c13384b774346b8aa9cf9a9",
              "lessThan": "e2f62a9744ebad3bcb6347a648e615026e9efeff",
              "versionType": "git",
              "status": "affected"
            }
          ]
        },
        {
          "vendor": "Linux",
          "product": "Linux",
          "defaultStatus": "affected",
          "programFiles": [
            "fs/xfs/xfs_fsmap.c",
            "fs/xfs/xfs_ioctl.c",
            "fs/xfs/xfs_iops.c"
          ],
          "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
          "versions": [
            {
              "version": "5.18",
              "status": "affected"
            },
            {
              "version": "0",
              "lessThan": "5.18",
              "versionType": "semver",
              "status": "unaffected"
            },
            {
              "version": "6.18.59",
              "lessThanOrEqual": "6.18.*",
              "versionType": "semver",
              "status": "unaffected"
            },
            {
              "version": "7.2.13",
              "lessThanOrEqual": "7.2.*",
              "versionType": "semver",
              "status": "unaffected"
            },
            {
              "version": "7.3",
              "lessThanOrEqual": "*",
              "versionType": "original_commit_for_fix",
              "status": "unaffected"
            }
          ]
        }
      ]
    }
  ],
  "metrics": {},
  "references": [
    {
      "url": "https://git.kernel.org/stable/c/19a1a22029ad3ae3604c763af6bd1195cb73648f",
      "source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67"
    },
    {
      "url": "https://git.kernel.org/stable/c/7809ac0161c7c5f52ed348fb1ec683b2b454a83e",
      "source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67"
    },
    {
      "url": "https://git.kernel.org/stable/c/e2f62a9744ebad3bcb6347a648e615026e9efeff",
      "source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67"
    }
  ]
}