ANDROID: user: Add vendor hook to user for GKI purpose

Add the vendor hook to user.c, because of some speical cases related to
our feature, we need to initialize the variables defined by ourselves in
user_struct, so we add the hook at alloc_uid to make sure we can go to
our own logic when the user_struct is about to initialize.

Bug: 187458531

Signed-off-by: heshuai1 <heshuai1@xiaomi.com>
Change-Id: I078484aac2c3d396aba5971d6d0f491652f3781c
(cherry picked from commit c9b8fa644f45e9c99da85d8947f6c7e06771f205)
This commit is contained in:
heshuai1
2021-05-19 18:45:44 +08:00
committed by Treehugger Robot
parent 8b885a54ba
commit 9ac0923ef5
3 changed files with 30 additions and 0 deletions

View File

@@ -68,6 +68,7 @@
#include <trace/hooks/ipv4.h>
#include <trace/hooks/signal.h>
#include <trace/hooks/cfg80211.h>
#include <trace/hooks/user.h>
/*
* Export tracepoints that act as a bare tracehook (ie: have no trace event
@@ -432,3 +433,5 @@ EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_del_page_from_lrulist);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_page_should_be_protected);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_mark_page_accessed);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_mmc_ffu_update_cid);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_alloc_uid);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_free_user);

View File

@@ -0,0 +1,23 @@
/* SPDX-License-Identifier: GPL-2.0 */
#undef TRACE_SYSTEM
#define TRACE_SYSTEM user
#undef TRACE_INCLUDE_PATH
#define TRACE_INCLUDE_PATH trace/hooks
#if !defined(_TRACE_HOOK_USER_H) || defined(TRACE_HEADER_MULTI_READ)
#define _TRACE_HOOK_USER_H
#include <linux/tracepoint.h>
#include <trace/hooks/vendor_hooks.h>
struct user_struct;
DECLARE_HOOK(android_vh_alloc_uid,
TP_PROTO(struct user_struct *user),
TP_ARGS(user));
DECLARE_HOOK(android_vh_free_user,
TP_PROTO(struct user_struct *up),
TP_ARGS(up));
#endif /* _TRACE_HOOK_USER_H */
/* This part must be outside protection */
#include <trace/define_trace.h>

View File

@@ -20,6 +20,8 @@
#include <linux/user_namespace.h>
#include <linux/proc_ns.h>
#include <trace/hooks/user.h>
/*
* userns count is 1 for root user, 1 for init_uts_ns,
* and 1 for... ?
@@ -152,6 +154,7 @@ static void user_epoll_free(struct user_struct *up)
static void free_user(struct user_struct *up, unsigned long flags)
__releases(&uidhash_lock)
{
trace_android_vh_free_user(up);
uid_hash_remove(up);
spin_unlock_irqrestore(&uidhash_lock, flags);
user_epoll_free(up);
@@ -204,6 +207,7 @@ struct user_struct *alloc_uid(kuid_t uid)
new->uid = uid;
refcount_set(&new->__count, 1);
trace_android_vh_alloc_uid(new);
if (user_epoll_alloc(new)) {
kmem_cache_free(uid_cachep, new);
return NULL;