base-files: fix uid/gid auto-enumeration to avoid 16-bit limit
authorThomas Winkler <tewinkler86@gmail.com>
Fri, 10 Nov 2023 21:48:59 +0000 (22:48 +0100)
committerHauke Mehrtens <hauke@hauke-m.de>
Mon, 8 Jul 2024 19:13:26 +0000 (21:13 +0200)
uid/gid range should be limited to 16bit unsigned integer range to
avoid "wraparound" issues with permissions where jffs2
is employed for storage and chown 65536 (first auto-created user)
becomes equivalent to chown 0

Fixes: #13927
Signed-off-by: Thomas Winkler <tewinkler86@gmail.com>
(cherry picked from commit 140b48a9e93909873bee777ca5bdf49fe4f01271)
Link: https://github.com/openwrt/openwrt/pull/15898
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
package/base-files/files/lib/functions.sh

index 50aed53b068b1c752b63ea7d15606d279c1f3ef4..c688ac77eee89023bb8f0757a80aac7e342661f7 100644 (file)
@@ -371,7 +371,7 @@ group_add_next() {
                return
        fi
        gids=$(cut -d: -f3 ${IPKG_INSTROOT}/etc/group)
-       gid=65536
+       gid=32768
        while echo "$gids" | grep -q "^$gid$"; do
                gid=$((gid + 1))
        done
@@ -402,7 +402,7 @@ user_add() {
        local rc
        [ -z "$uid" ] && {
                uids=$(cut -d: -f3 ${IPKG_INSTROOT}/etc/passwd)
-               uid=65536
+               uid=32768
                while echo "$uids" | grep -q "^$uid$"; do
                        uid=$((uid + 1))
                done