Skip to content

Commit fc01601

Browse files
authored
Create FIX_APATCH_OPENELA.patch
1 parent d54aa70 commit fc01601

File tree

1 file changed

+242
-0
lines changed

1 file changed

+242
-0
lines changed

patches /FIX_APATCH_OPENELA.patch

Lines changed: 242 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,242 @@
1+
From b9dfcc73bfe35a29500bf28b7f5cd2feae303d1a Mon Sep 17 00:00:00 2001
2+
From: sidex15 <moses.limbo@gmail.com>
3+
Date: Wed, 11 Dec 2024 16:41:03 +0800
4+
Subject: [PATCH] Revert "cred: switch to using atomic_long_t"
5+
6+
This commit fix the APatch issues like can't install modules,
7+
no SuperUser/Root, and kernel build issues.
8+
9+
reference: https://github.com/sidex15/android_kernel_lge_sm8150/commit/eaa448ec761528f7ccdf3ae998b8d24ba95a8e35
10+
11+
This reverts commit eac54659ff77706569a8419510ca6676b6ff9827.
12+
---
13+
include/linux/cred.h | 6 ++--
14+
kernel/cred.c | 66 ++++++++++++++++++++++----------------------
15+
2 files changed, 36 insertions(+), 36 deletions(-)
16+
17+
diff --git a/include/linux/cred.h b/include/linux/cred.h
18+
index e7f3f559c07d..493516e97e45 100644
19+
--- a/include/linux/cred.h
20+
+++ b/include/linux/cred.h
21+
@@ -109,7 +109,7 @@ extern void groups_sort(struct group_info *);
22+
* same context as task->real_cred.
23+
*/
24+
struct cred {
25+
- atomic_long_t usage;
26+
+ atomic_t usage;
27+
#ifdef CONFIG_DEBUG_CREDENTIALS
28+
atomic_t subscribers; /* number of processes subscribed */
29+
void *put_addr;
30+
@@ -226,7 +226,7 @@ static inline bool cap_ambient_invariant_ok(const struct cred *cred)
31+
*/
32+
static inline struct cred *get_new_cred(struct cred *cred)
33+
{
34+
- atomic_long_inc(&cred->usage);
35+
+ atomic_inc(&cred->usage);
36+
return cred;
37+
}
38+
39+
@@ -270,7 +270,7 @@ static inline void put_cred(const struct cred *_cred)
40+
41+
if (cred) {
42+
validate_creds(cred);
43+
- if (atomic_long_dec_and_test(&(cred)->usage))
44+
+ if (atomic_dec_and_test(&(cred)->usage))
45+
__put_cred(cred);
46+
}
47+
}
48+
diff --git a/kernel/cred.c b/kernel/cred.c
49+
index 8c58f0f63af2..a9f0f8b21d8c 100644
50+
--- a/kernel/cred.c
51+
+++ b/kernel/cred.c
52+
@@ -101,17 +101,17 @@ static void put_cred_rcu(struct rcu_head *rcu)
53+
54+
#ifdef CONFIG_DEBUG_CREDENTIALS
55+
if (cred->magic != CRED_MAGIC_DEAD ||
56+
- atomic_long_read(&cred->usage) != 0 ||
57+
+ atomic_read(&cred->usage) != 0 ||
58+
read_cred_subscribers(cred) != 0)
59+
panic("CRED: put_cred_rcu() sees %p with"
60+
- " mag %x, put %p, usage %ld, subscr %d\n",
61+
+ " mag %x, put %p, usage %d, subscr %d\n",
62+
cred, cred->magic, cred->put_addr,
63+
- atomic_long_read(&cred->usage),
64+
+ atomic_read(&cred->usage),
65+
read_cred_subscribers(cred));
66+
#else
67+
- if (atomic_long_read(&cred->usage) != 0)
68+
- panic("CRED: put_cred_rcu() sees %p with usage %ld\n",
69+
- cred, atomic_long_read(&cred->usage));
70+
+ if (atomic_read(&cred->usage) != 0)
71+
+ panic("CRED: put_cred_rcu() sees %p with usage %d\n",
72+
+ cred, atomic_read(&cred->usage));
73+
#endif
74+
75+
security_cred_free(cred);
76+
@@ -134,11 +134,11 @@ static void put_cred_rcu(struct rcu_head *rcu)
77+
*/
78+
void __put_cred(struct cred *cred)
79+
{
80+
- kdebug("__put_cred(%p{%ld,%d})", cred,
81+
- atomic_long_read(&cred->usage),
82+
+ kdebug("__put_cred(%p{%d,%d})", cred,
83+
+ atomic_read(&cred->usage),
84+
read_cred_subscribers(cred));
85+
86+
- BUG_ON(atomic_long_read(&cred->usage) != 0);
87+
+ BUG_ON(atomic_read(&cred->usage) != 0);
88+
#ifdef CONFIG_DEBUG_CREDENTIALS
89+
BUG_ON(read_cred_subscribers(cred) != 0);
90+
cred->magic = CRED_MAGIC_DEAD;
91+
@@ -161,8 +161,8 @@ void exit_creds(struct task_struct *tsk)
92+
{
93+
struct cred *cred;
94+
95+
- kdebug("exit_creds(%u,%p,%p,{%ld,%d})", tsk->pid, tsk->real_cred, tsk->cred,
96+
- atomic_long_read(&tsk->cred->usage),
97+
+ kdebug("exit_creds(%u,%p,%p,{%d,%d})", tsk->pid, tsk->real_cred, tsk->cred,
98+
+ atomic_read(&tsk->cred->usage),
99+
read_cred_subscribers(tsk->cred));
100+
101+
cred = (struct cred *) tsk->real_cred;
102+
@@ -197,7 +197,7 @@ const struct cred *get_task_cred(struct task_struct *task)
103+
do {
104+
cred = __task_cred((task));
105+
BUG_ON(!cred);
106+
- } while (!atomic_long_inc_not_zero(&((struct cred *)cred)->usage));
107+
+ } while (!atomic_inc_not_zero(&((struct cred *)cred)->usage));
108+
109+
rcu_read_unlock();
110+
return cred;
111+
@@ -215,7 +215,7 @@ struct cred *cred_alloc_blank(void)
112+
if (!new)
113+
return NULL;
114+
115+
- atomic_long_set(&new->usage, 1);
116+
+ atomic_set(&new->usage, 1);
117+
#ifdef CONFIG_DEBUG_CREDENTIALS
118+
new->magic = CRED_MAGIC;
119+
#endif
120+
@@ -262,7 +262,7 @@ struct cred *prepare_creds(void)
121+
memcpy(new, old, sizeof(struct cred));
122+
123+
new->non_rcu = 0;
124+
- atomic_long_set(&new->usage, 1);
125+
+ atomic_set(&new->usage, 1);
126+
set_cred_subscribers(new, 0);
127+
get_group_info(new->group_info);
128+
get_uid(new->user);
129+
@@ -338,8 +338,8 @@ int copy_creds(struct task_struct *p, unsigned long clone_flags)
130+
p->real_cred = get_cred(p->cred);
131+
get_cred(p->cred);
132+
alter_cred_subscribers(p->cred, 2);
133+
- kdebug("share_creds(%p{%ld,%d})",
134+
- p->cred, atomic_long_read(&p->cred->usage),
135+
+ kdebug("share_creds(%p{%d,%d})",
136+
+ p->cred, atomic_read(&p->cred->usage),
137+
read_cred_subscribers(p->cred));
138+
atomic_inc(&p->cred->user->processes);
139+
return 0;
140+
@@ -429,8 +429,8 @@ int commit_creds(struct cred *new)
141+
struct task_struct *task = current;
142+
const struct cred *old = task->real_cred;
143+
144+
- kdebug("commit_creds(%p{%ld,%d})", new,
145+
- atomic_long_read(&new->usage),
146+
+ kdebug("commit_creds(%p{%d,%d})", new,
147+
+ atomic_read(&new->usage),
148+
read_cred_subscribers(new));
149+
150+
BUG_ON(task->cred != old);
151+
@@ -439,7 +439,7 @@ int commit_creds(struct cred *new)
152+
validate_creds(old);
153+
validate_creds(new);
154+
#endif
155+
- BUG_ON(atomic_long_read(&new->usage) < 1);
156+
+ BUG_ON(atomic_read(&new->usage) < 1);
157+
158+
get_cred(new); /* we will require a ref for the subj creds too */
159+
160+
@@ -512,14 +512,14 @@ EXPORT_SYMBOL(commit_creds);
161+
*/
162+
void abort_creds(struct cred *new)
163+
{
164+
- kdebug("abort_creds(%p{%ld,%d})", new,
165+
- atomic_long_read(&new->usage),
166+
+ kdebug("abort_creds(%p{%d,%d})", new,
167+
+ atomic_read(&new->usage),
168+
read_cred_subscribers(new));
169+
170+
#ifdef CONFIG_DEBUG_CREDENTIALS
171+
BUG_ON(read_cred_subscribers(new) != 0);
172+
#endif
173+
- BUG_ON(atomic_long_read(&new->usage) < 1);
174+
+ BUG_ON(atomic_read(&new->usage) < 1);
175+
put_cred(new);
176+
}
177+
EXPORT_SYMBOL(abort_creds);
178+
@@ -535,8 +535,8 @@ const struct cred *override_creds(const struct cred *new)
179+
{
180+
const struct cred *old = current->cred;
181+
182+
- kdebug("override_creds(%p{%ld,%d})", new,
183+
- atomic_long_read(&new->usage),
184+
+ kdebug("override_creds(%p{%d,%d})", new,
185+
+ atomic_read(&new->usage),
186+
read_cred_subscribers(new));
187+
188+
validate_creds(old);
189+
@@ -558,8 +558,8 @@ const struct cred *override_creds(const struct cred *new)
190+
rcu_assign_pointer(current->cred, new);
191+
alter_cred_subscribers(old, -1);
192+
193+
- kdebug("override_creds() = %p{%ld,%d}", old,
194+
- atomic_long_read(&old->usage),
195+
+ kdebug("override_creds() = %p{%d,%d}", old,
196+
+ atomic_read(&old->usage),
197+
read_cred_subscribers(old));
198+
return old;
199+
}
200+
@@ -576,8 +576,8 @@ void revert_creds(const struct cred *old)
201+
{
202+
const struct cred *override = current->cred;
203+
204+
- kdebug("revert_creds(%p{%ld,%d})", old,
205+
- atomic_long_read(&old->usage),
206+
+ kdebug("revert_creds(%p{%d,%d})", old,
207+
+ atomic_read(&old->usage),
208+
read_cred_subscribers(old));
209+
210+
validate_creds(old);
211+
@@ -637,7 +637,7 @@ struct cred *prepare_kernel_cred(struct task_struct *daemon)
212+
213+
*new = *old;
214+
new->non_rcu = 0;
215+
- atomic_long_set(&new->usage, 1);
216+
+ atomic_set(&new->usage, 1);
217+
set_cred_subscribers(new, 0);
218+
get_uid(new->user);
219+
get_user_ns(new->user_ns);
220+
@@ -760,8 +760,8 @@ static void dump_invalid_creds(const struct cred *cred, const char *label,
221+
cred == tsk->cred ? "[eff]" : "");
222+
printk(KERN_ERR "CRED: ->magic=%x, put_addr=%p\n",
223+
cred->magic, cred->put_addr);
224+
- printk(KERN_ERR "CRED: ->usage=%ld, subscr=%d\n",
225+
- atomic_long_read(&cred->usage),
226+
+ printk(KERN_ERR "CRED: ->usage=%d, subscr=%d\n",
227+
+ atomic_read(&cred->usage),
228+
read_cred_subscribers(cred));
229+
printk(KERN_ERR "CRED: ->*uid = { %d,%d,%d,%d }\n",
230+
from_kuid_munged(&init_user_ns, cred->uid),
231+
@@ -833,9 +833,9 @@ EXPORT_SYMBOL(__validate_process_creds);
232+
*/
233+
void validate_creds_for_do_exit(struct task_struct *tsk)
234+
{
235+
- kdebug("validate_creds_for_do_exit(%p,%p{%ld,%d})",
236+
+ kdebug("validate_creds_for_do_exit(%p,%p{%d,%d})",
237+
tsk->real_cred, tsk->cred,
238+
- atomic_long_read(&tsk->cred->usage),
239+
+ atomic_read(&tsk->cred->usage),
240+
read_cred_subscribers(tsk->cred));
241+
242+
__validate_process_creds(tsk, __FILE__, __LINE__);

0 commit comments

Comments
 (0)