Zygote: Fix dropping capabilities in containers

Casting a int to long will sign-extend it, so if capability bit 31
was set the bitmask would always have all the upper 32 bits set,
failing to drop any of the upper capabilities.

Instead of plain casting, use Integer.toUnsignedLong to always
zero-extend the bitmask

Change-Id: I9b4c9273e8eb09f7e231b5c579e7906d05b6e475
This commit is contained in:
Alessandro Astone
2023-03-13 01:09:38 +01:00
parent 1ae5b8e863
commit cf2a3f6eb5

View File

@@ -716,7 +716,8 @@ public class ZygoteInit {
} catch (ErrnoException ex) {
throw new RuntimeException("Failed to capget()", ex);
}
capabilities &= ((long) data[0].effective) | (((long) data[1].effective) << 32);
capabilities &= Integer.toUnsignedLong(data[0].effective) |
(Integer.toUnsignedLong(data[1].effective) << 32);
/* Hardcoded command line to start the system server */
String[] args = {