From: ChenXiaoSong chenxiaosong@kylinos.cn
[ Upstream commit 9f99caa8950a76f560a90074e3a4b93cfa8b3d84 ]
This was reported by the KUnit tests in the later patches.
See MS-ERREF 2.3.1 STATUS_UNABLE_TO_FREE_VM. Keep it consistent with the value in the documentation.
Signed-off-by: ChenXiaoSong chenxiaosong@kylinos.cn Acked-by: Paulo Alcantara (Red Hat) pc@manguebit.org Signed-off-by: Steve French stfrench@microsoft.com Signed-off-by: Sasha Levin sashal@kernel.org ---
LLM Generated explanations, may be completely bogus:
## Analysis of smb/client: fix NT_STATUS_UNABLE_TO_FREE_VM value
### 1. COMMIT MESSAGE ANALYSIS
The commit explicitly states it's a "fix" for an incorrect NT status code value. Key points: - Found by KUnit tests (systematic testing uncovered the issue) - References MS-ERREF 2.3.1 documentation as the authoritative source - Acked by Paulo Alcantara (Red Hat) - a key SMB/CIFS maintainer - Committed by Steve French - the SMB subsystem maintainer
### 2. CODE CHANGE ANALYSIS
The change is a single-line modification in `fs/smb/client/nterr.h`:
```c -#define NT_STATUS_UNABLE_TO_FREE_VM 0x80000000 | 0x001a +#define NT_STATUS_UNABLE_TO_FREE_VM 0xC0000000 | 0x001a ```
In NT status codes, the high bits encode severity: - `0x00000000` = Success - `0x40000000` = Informational - `0x80000000` = Warning - `0xC0000000` = Error
The bug: `NT_STATUS_UNABLE_TO_FREE_VM` was incorrectly defined as a "Warning" (`0x80000000`) instead of "Error" (`0xC0000000`). Looking at the context, **all surrounding status codes** use `0xC0000000`, making this one obvious outlier.
Per Microsoft's MS-ERREF documentation, STATUS_UNABLE_TO_FREE_VM (0xC000001A) is indeed an error status, not a warning.
### 3. CLASSIFICATION
- **Bug type:** Incorrect constant value (data bug) - **Not a feature:** Simply corrects an existing definition to match specification - **Not a security issue:** Though incorrect error handling could have unexpected effects
### 4. SCOPE AND RISK ASSESSMENT
- **Lines changed:** 1 - **Files touched:** 1 (header file) - **Complexity:** Minimal - single character change (`8` → `C`) - **Risk:** Essentially zero - corrects an obvious typo/error to match: 1. The official Microsoft documentation 2. The pattern used by all surrounding definitions
### 5. USER IMPACT
If an SMB server returns this status code, the client would fail to properly match and handle it due to the incorrect value. This could cause: - Failure to recognize error conditions - Incorrect error messages to users - Potential mishandling of this error scenario
While this specific status code may be rarely encountered in practice, when it does occur, the current code would misbehave.
### 6. STABILITY INDICATORS
- **Reviewed by maintainers:** Acked by Paulo Alcantara, committed by Steve French - **Testing:** Found through KUnit tests (automated testing) - **Pattern consistency:** All other NT_STATUS_* codes in the same numerical range use `0xC0000000`
### 7. DEPENDENCY CHECK
This is a completely standalone fix. The header file has existed for a long time, and this is just correcting an incorrect value within it. No dependencies on other commits.
---
### Summary
**Should this be backported?**
This commit is an excellent backport candidate:
1. **Obviously correct:** The fix makes the value match both official Microsoft documentation and the pattern used by all surrounding definitions 2. **Fixes a real bug:** Incorrect status code would cause mismatched error handling 3. **Minimal scope:** One-character change in a single header file 4. **Zero regression risk:** This is purely a correctness fix to a constant 5. **No new features:** Just corrects existing code 6. **No dependencies:** Standalone fix 7. **Well-reviewed:** Acked by key SMB maintainer
This is exactly the type of safe, surgical, low-risk fix that stable trees should include. The change is so minimal and so obviously correct that there's essentially no risk, while the benefit is ensuring correct SMB protocol handling.
**YES**
fs/smb/client/nterr.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/fs/smb/client/nterr.h b/fs/smb/client/nterr.h index 180602c22355e..e3a607b45e719 100644 --- a/fs/smb/client/nterr.h +++ b/fs/smb/client/nterr.h @@ -70,7 +70,7 @@ extern const struct nt_err_code_struct nt_errs[]; #define NT_STATUS_NO_MEMORY 0xC0000000 | 0x0017 #define NT_STATUS_CONFLICTING_ADDRESSES 0xC0000000 | 0x0018 #define NT_STATUS_NOT_MAPPED_VIEW 0xC0000000 | 0x0019 -#define NT_STATUS_UNABLE_TO_FREE_VM 0x80000000 | 0x001a +#define NT_STATUS_UNABLE_TO_FREE_VM 0xC0000000 | 0x001a #define NT_STATUS_UNABLE_TO_DELETE_SECTION 0xC0000000 | 0x001b #define NT_STATUS_INVALID_SYSTEM_SERVICE 0xC0000000 | 0x001c #define NT_STATUS_ILLEGAL_INSTRUCTION 0xC0000000 | 0x001d