s3:mod:posixacl_xattr: use NUMERIC_CMP in posixacl_xattr_entry_compare
authorDouglas Bagnall <douglas.bagnall@catalyst.net.nz>
Sun, 7 Apr 2024 03:12:56 +0000 (15:12 +1200)
committerAndrew Bartlett <abartlet@samba.org>
Tue, 23 Apr 2024 01:33:29 +0000 (01:33 +0000)
The first subtraction was between uint16_t, so is safe with 32 bit
int, but the second compared uint32_t, so was not safe.

BUG: https://bugzilla.samba.org/show_bug.cgi?id=15625

Signed-off-by: Douglas Bagnall <douglas.bagnall@catalyst.net.nz>
Reviewed-by: Andrew Bartlett <abartlet@samba.org>
source3/modules/posixacl_xattr.c

index 365cdc79973f2b70b807aa526badacc96fa5dcb6..5d0516cf7541c0a460f2368a629e02b7e76454fa 100644 (file)
@@ -226,14 +226,14 @@ static int posixacl_xattr_entry_compare(const void *left, const void *right)
        tag_left = SVAL(left, 0);
        tag_right = SVAL(right, 0);
 
-       ret = (tag_left - tag_right);
-       if (!ret) {
+       ret = NUMERIC_CMP(tag_left, tag_right);
+       if (ret == 0) {
                /* ID is the third element in the entry, after two short
                   integers (tag and perm), i.e at offset 4.
                */
                id_left = IVAL(left, 4);
                id_right = IVAL(right, 4);
-               ret = id_left - id_right;
+               ret = NUMERIC_CMP(id_left, id_right);
        }
 
        return ret;