libprocessgroup: UIDs in linux are unsigned

We use the %d format specificier for uid_t, which maps to
__kernel_uid32_t, which is unsigned. [1] This is undefined behavior
which can lead to paths with negative UIDs when erroneously large
values are passed for uid:

E libprocessgroup: No such cgroup attribute: /sys/fs/cgroup/uid_-89846/cgroup.freeze

Fix it with %u.

[1] https://cs.android.com/search?q=typedef.*__kernel_uid32_t&ss=android%2Fplatform%2Fsuperproject%2Fmain

Change-Id: Ibb52ba2503e30e2f20770b7d23629167e38d076a
This commit is contained in:
T.J. Mercier 2023-07-21 00:31:06 +00:00
parent 89d22239d2
commit bf2bebd8e7

View file

@ -146,7 +146,7 @@ bool ProfileAttribute::GetPathForUID(uid_t uid, std::string* path) const {
const std::string& file_name =
controller()->version() == 2 && !file_v2_name_.empty() ? file_v2_name_ : file_name_;
*path = StringPrintf("%s/uid_%d/%s", controller()->path(), uid, file_name.c_str());
*path = StringPrintf("%s/uid_%u/%s", controller()->path(), uid, file_name.c_str());
return true;
}