diff options
Diffstat (limited to 'rust/helpers')
| -rw-r--r-- | rust/helpers/cred.c | 13 | ||||
| -rw-r--r-- | rust/helpers/fs.c | 12 | ||||
| -rw-r--r-- | rust/helpers/helpers.c | 3 | ||||
| -rw-r--r-- | rust/helpers/security.c | 20 | ||||
| -rw-r--r-- | rust/helpers/spinlock.c | 8 | ||||
| -rw-r--r-- | rust/helpers/task.c | 38 | 
6 files changed, 92 insertions, 2 deletions
| diff --git a/rust/helpers/cred.c b/rust/helpers/cred.c new file mode 100644 index 000000000000..fde7ae20cdd1 --- /dev/null +++ b/rust/helpers/cred.c @@ -0,0 +1,13 @@ +// SPDX-License-Identifier: GPL-2.0 + +#include <linux/cred.h> + +const struct cred *rust_helper_get_cred(const struct cred *cred) +{ +	return get_cred(cred); +} + +void rust_helper_put_cred(const struct cred *cred) +{ +	put_cred(cred); +} diff --git a/rust/helpers/fs.c b/rust/helpers/fs.c new file mode 100644 index 000000000000..a75c96763372 --- /dev/null +++ b/rust/helpers/fs.c @@ -0,0 +1,12 @@ +// SPDX-License-Identifier: GPL-2.0 + +/* + * Copyright (C) 2024 Google LLC. + */ + +#include <linux/fs.h> + +struct file *rust_helper_get_file(struct file *f) +{ +	return get_file(f); +} diff --git a/rust/helpers/helpers.c b/rust/helpers/helpers.c index 30f40149f3a9..62022b18caf5 100644 --- a/rust/helpers/helpers.c +++ b/rust/helpers/helpers.c @@ -11,12 +11,15 @@  #include "bug.c"  #include "build_assert.c"  #include "build_bug.c" +#include "cred.c"  #include "err.c" +#include "fs.c"  #include "kunit.c"  #include "mutex.c"  #include "page.c"  #include "rbtree.c"  #include "refcount.c" +#include "security.c"  #include "signal.c"  #include "slab.c"  #include "spinlock.c" diff --git a/rust/helpers/security.c b/rust/helpers/security.c new file mode 100644 index 000000000000..239e5b4745fe --- /dev/null +++ b/rust/helpers/security.c @@ -0,0 +1,20 @@ +// SPDX-License-Identifier: GPL-2.0 + +#include <linux/security.h> + +#ifndef CONFIG_SECURITY +void rust_helper_security_cred_getsecid(const struct cred *c, u32 *secid) +{ +	security_cred_getsecid(c, secid); +} + +int rust_helper_security_secid_to_secctx(u32 secid, char **secdata, u32 *seclen) +{ +	return security_secid_to_secctx(secid, secdata, seclen); +} + +void rust_helper_security_release_secctx(char *secdata, u32 seclen) +{ +	security_release_secctx(secdata, seclen); +} +#endif diff --git a/rust/helpers/spinlock.c b/rust/helpers/spinlock.c index acc1376b833c..92f7fc418425 100644 --- a/rust/helpers/spinlock.c +++ b/rust/helpers/spinlock.c @@ -7,10 +7,14 @@ void rust_helper___spin_lock_init(spinlock_t *lock, const char *name,  				  struct lock_class_key *key)  {  #ifdef CONFIG_DEBUG_SPINLOCK +# if defined(CONFIG_PREEMPT_RT) +	__spin_lock_init(lock, name, key, false); +# else /*!CONFIG_PREEMPT_RT */  	__raw_spin_lock_init(spinlock_check(lock), name, key, LD_WAIT_CONFIG); -#else +# endif /* CONFIG_PREEMPT_RT */ +#else /* !CONFIG_DEBUG_SPINLOCK */  	spin_lock_init(lock); -#endif +#endif /* CONFIG_DEBUG_SPINLOCK */  }  void rust_helper_spin_lock(spinlock_t *lock) diff --git a/rust/helpers/task.c b/rust/helpers/task.c index 7ac789232d11..7d66487db831 100644 --- a/rust/helpers/task.c +++ b/rust/helpers/task.c @@ -17,3 +17,41 @@ void rust_helper_put_task_struct(struct task_struct *t)  {  	put_task_struct(t);  } + +kuid_t rust_helper_task_uid(struct task_struct *task) +{ +	return task_uid(task); +} + +kuid_t rust_helper_task_euid(struct task_struct *task) +{ +	return task_euid(task); +} + +#ifndef CONFIG_USER_NS +uid_t rust_helper_from_kuid(struct user_namespace *to, kuid_t uid) +{ +	return from_kuid(to, uid); +} +#endif /* CONFIG_USER_NS */ + +bool rust_helper_uid_eq(kuid_t left, kuid_t right) +{ +	return uid_eq(left, right); +} + +kuid_t rust_helper_current_euid(void) +{ +	return current_euid(); +} + +struct user_namespace *rust_helper_current_user_ns(void) +{ +	return current_user_ns(); +} + +pid_t rust_helper_task_tgid_nr_ns(struct task_struct *tsk, +				  struct pid_namespace *ns) +{ +	return task_tgid_nr_ns(tsk, ns); +} | 
