It's actually not a 24-bit code or a 32-bit, it's a structure with
4 bits of flags, 12 bits of "facility" and 16 bits of "code" (which
btw means 28 bits not 24). And then the NTSTATUS shares its space
with the HRESULT based on the "N" flag - see MS-ERREF sections 2.1
and 2.3. These are constantly being added-to. So, it's entirely
correct to treat these as a 32-bit quantity.
It did surprise me that these two codes differ only by the "warning"
vs "error" severity value, yet they indicate entirely different
situations. Very, very odd. Fix looks like best approach.
Feel free to add my Acked-by: Tom Talpey <tom@xxxxxxxxxx>
Tom.
On 1/21/2025 12:45 AM, Steve French wrote:
On Mon, Jan 20, 2025 at 11:55 AM Pali Rohár <pali@xxxxxxxxxx> wrote:
Just to note that I have sent this patch in series with "cifs: Add
missing NT_STATUS_* codes from nterr.h to nterr.c" patch which is adding
also NT_STATUS_STOPPED_ON_SYMLINK (mentioned in commit message):
https://lore.kernel.org/linux-cifs/20241227173709.22892-1-pali@xxxxxxxxxx/t/#u
Both of these are in for-next
On Sunday 19 January 2025 19:48:39 Steve French wrote:
Any thoughts on the attached patch (which is tentatively in
cifs-2.6.git for-next)?
NT Status code is 32-bit number, so for comparing two NT Status codes is
needed to check all 32 bits, and not just low 24 bits.
Before this change kernel printed message:
"Status code returned 0x8000002d NT_STATUS_NOT_COMMITTED"
It was incorrect as because NT_STATUS_NOT_COMMITTED is defined as
0xC000002d and 0x8000002d has defined name NT_STATUS_STOPPED_ON_SYMLINK.
With this change kernel prints message:
"Status code returned 0x8000002d NT_STATUS_STOPPED_ON_SYMLINK"
Signed-off-by: Pali Rohár <pali@xxxxxxxxxx>
--
Thanks,
Steve