|
| 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