kernel: fix prebuilt get_cred_rcu on certain linux version
Previously, i think non_rcu not available on 4.4.186 and below
but, apparently 4.9 too.
Fix: 33d2961b05
Signed-off-by: Rissu <90097027+rsuntk@users.noreply.github.com>
This commit is contained in:
@@ -80,12 +80,11 @@ endif
|
||||
ifeq ($(shell grep -q "get_cred_rcu" $(srctree)/include/linux/cred.h; echo $$?),0)
|
||||
ccflags-y += -DKSU_COMPAT_HAS_GET_CRED_RCU
|
||||
else
|
||||
# https://github.com/gregkh/linux/commit/123e44b9a49a42ff5313ec65256f1540d7c52fa0
|
||||
ifeq ($(shell grep -q "atomic_long_t\s\+\usage" $(srctree)/include/linux/cred.h; echo $$?),0)
|
||||
$(info -- KernelSU compat: atomic_long_t detected.)
|
||||
ccflags-y += -DKSU_COMPAT_ATOMIC_LONG
|
||||
else
|
||||
$(info -- KernelSU compat: atomic_t detected.)
|
||||
endif
|
||||
ifeq ($(shell grep -q "int\s\+\non_rcu" $(srctree)/include/linux/cred.h; echo $$?),0)
|
||||
ccflags-y += -DKSU_COMPAT_HAS_NONCONST_CRED
|
||||
endif
|
||||
endif
|
||||
|
||||
|
||||
@@ -8,24 +8,26 @@
|
||||
#include "linux/key.h"
|
||||
|
||||
// for kernel without get_cred_rcu
|
||||
#ifndef KSU_COMPAT_HAS_GET_CRED_RCU
|
||||
static inline const struct cred *get_cred_rcu(const struct cred *cred)
|
||||
{
|
||||
struct cred *nonconst_cred = (struct cred *) cred;
|
||||
if (!cred)
|
||||
return NULL;
|
||||
#ifdef KSU_COMPAT_ATOMIC_LONG
|
||||
if (!atomic_long_inc_not_zero(&nonconst_cred->usage))
|
||||
#else
|
||||
if (!atomic_inc_not_zero(&nonconst_cred->usage))
|
||||
#endif
|
||||
return NULL;
|
||||
validate_creds(cred);
|
||||
nonconst_cred->non_rcu = 0;
|
||||
return cred;
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifndef KSU_COMPAT_HAS_GET_CRED_RCU
|
||||
static inline const struct cred *get_cred_rcu(const struct cred *cred)
|
||||
{
|
||||
struct cred *nonconst_cred = (struct cred *) cred;
|
||||
if (!cred)
|
||||
return NULL;
|
||||
#ifdef KSU_COMPAT_ATOMIC_LONG
|
||||
if (!atomic_long_inc_not_zero(&nonconst_cred->usage))
|
||||
#else
|
||||
if (!atomic_inc_not_zero(&nonconst_cred->usage))
|
||||
#endif
|
||||
return NULL;
|
||||
validate_creds(cred);
|
||||
#ifdef KSU_COMPAT_HAS_NONCONST_CRED
|
||||
nonconst_cred->non_rcu = 0;
|
||||
#endif
|
||||
return cred;
|
||||
}
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Adapt to Huawei HISI kernel without affecting other kernels ,
|
||||
* Huawei Hisi Kernel EBITMAP Enable or Disable Flag ,
|
||||
|
||||
Reference in New Issue
Block a user