>From the AOSP gerrit fixing internal bug 32399196 ( https://android-review.googlesource.com/#/c/295732 )
Change subject: dirtree: add DIRTREE_NOSTAT flag Callback from top /proc/ node tells dirtree to hold off performing a fstatat() call until after we hare satisfied with the name being numerical. Affects ps and pgrep superfluous calls. Test: ps, logcat -b events -d -s auditd and check for selinux getattr for /proc/iomem or /proc/sysrq-trigger. Change-Id: Ib7d64601ed9db90ff877a4ad0856f20e9fa15398 --- toys/posix/ps.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/toys/posix/ps.c b/toys/posix/ps.c index 15acc84..25b06c4 100644 --- a/toys/posix/ps.c +++ b/toys/posix/ps.c @@ -615,7 +615,7 @@ static int get_ps(struct dirtree *new) // Recurse one level into /proc children, skip non-numeric entries if (!new->parent) - return DIRTREE_RECURSE|DIRTREE_SHUTUP + return DIRTREE_RECURSE|DIRTREE_SHUTUP|DIRTREE_NOSTAT |(DIRTREE_SAVE*(TT.threadparent||!TT.show_process)); memset(slot, 0, sizeof(tb->slot)); @@ -623,6 +623,8 @@ static int get_ps(struct dirtree *new) if (TT.threadparent && TT.threadparent->extra) if (*slot == *(((struct carveup *)TT.threadparent->extra)->slot)) return 0; fd = dirtree_parentfd(new); + // Implied policy is DIRTREE_SHUTUP, no need for error checking. + fstatat(fd, new->name, &new->st, AT_SYMLINK_NOFOLLOW); len = 2048; sprintf(buf, "%lld/stat", *slot); _______________________________________________ Toybox mailing list Toybox@lists.landley.net http://lists.landley.net/listinfo.cgi/toybox-landley.net