cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

init_task.c (6224B)


      1// SPDX-License-Identifier: GPL-2.0
      2#include <linux/init_task.h>
      3#include <linux/export.h>
      4#include <linux/mqueue.h>
      5#include <linux/sched.h>
      6#include <linux/sched/sysctl.h>
      7#include <linux/sched/rt.h>
      8#include <linux/sched/task.h>
      9#include <linux/init.h>
     10#include <linux/fs.h>
     11#include <linux/mm.h>
     12#include <linux/audit.h>
     13#include <linux/numa.h>
     14#include <linux/scs.h>
     15
     16#include <linux/uaccess.h>
     17
     18static struct signal_struct init_signals = {
     19	.nr_threads	= 1,
     20	.thread_head	= LIST_HEAD_INIT(init_task.thread_node),
     21	.wait_chldexit	= __WAIT_QUEUE_HEAD_INITIALIZER(init_signals.wait_chldexit),
     22	.shared_pending	= {
     23		.list = LIST_HEAD_INIT(init_signals.shared_pending.list),
     24		.signal =  {{0}}
     25	},
     26	.multiprocess	= HLIST_HEAD_INIT,
     27	.rlim		= INIT_RLIMITS,
     28	.cred_guard_mutex = __MUTEX_INITIALIZER(init_signals.cred_guard_mutex),
     29	.exec_update_lock = __RWSEM_INITIALIZER(init_signals.exec_update_lock),
     30#ifdef CONFIG_POSIX_TIMERS
     31	.posix_timers = LIST_HEAD_INIT(init_signals.posix_timers),
     32	.cputimer	= {
     33		.cputime_atomic	= INIT_CPUTIME_ATOMIC,
     34	},
     35#endif
     36	INIT_CPU_TIMERS(init_signals)
     37	.pids = {
     38		[PIDTYPE_PID]	= &init_struct_pid,
     39		[PIDTYPE_TGID]	= &init_struct_pid,
     40		[PIDTYPE_PGID]	= &init_struct_pid,
     41		[PIDTYPE_SID]	= &init_struct_pid,
     42	},
     43	INIT_PREV_CPUTIME(init_signals)
     44};
     45
     46static struct sighand_struct init_sighand = {
     47	.count		= REFCOUNT_INIT(1),
     48	.action		= { { { .sa_handler = SIG_DFL, } }, },
     49	.siglock	= __SPIN_LOCK_UNLOCKED(init_sighand.siglock),
     50	.signalfd_wqh	= __WAIT_QUEUE_HEAD_INITIALIZER(init_sighand.signalfd_wqh),
     51};
     52
     53#ifdef CONFIG_SHADOW_CALL_STACK
     54unsigned long init_shadow_call_stack[SCS_SIZE / sizeof(long)]
     55		__init_task_data = {
     56	[(SCS_SIZE / sizeof(long)) - 1] = SCS_END_MAGIC
     57};
     58#endif
     59
     60/*
     61 * Set up the first task table, touch at your own risk!. Base=0,
     62 * limit=0x1fffff (=2MB)
     63 */
     64struct task_struct init_task
     65#ifdef CONFIG_ARCH_TASK_STRUCT_ON_STACK
     66	__init_task_data
     67#endif
     68	__aligned(L1_CACHE_BYTES)
     69= {
     70#ifdef CONFIG_THREAD_INFO_IN_TASK
     71	.thread_info	= INIT_THREAD_INFO(init_task),
     72	.stack_refcount	= REFCOUNT_INIT(1),
     73#endif
     74	.__state	= 0,
     75	.stack		= init_stack,
     76	.usage		= REFCOUNT_INIT(2),
     77	.flags		= PF_KTHREAD,
     78	.prio		= MAX_PRIO - 20,
     79	.static_prio	= MAX_PRIO - 20,
     80	.normal_prio	= MAX_PRIO - 20,
     81	.policy		= SCHED_NORMAL,
     82	.cpus_ptr	= &init_task.cpus_mask,
     83	.user_cpus_ptr	= NULL,
     84	.cpus_mask	= CPU_MASK_ALL,
     85	.nr_cpus_allowed= NR_CPUS,
     86	.mm		= NULL,
     87	.active_mm	= &init_mm,
     88	.restart_block	= {
     89		.fn = do_no_restart_syscall,
     90	},
     91	.se		= {
     92		.group_node 	= LIST_HEAD_INIT(init_task.se.group_node),
     93	},
     94	.rt		= {
     95		.run_list	= LIST_HEAD_INIT(init_task.rt.run_list),
     96		.time_slice	= RR_TIMESLICE,
     97	},
     98	.tasks		= LIST_HEAD_INIT(init_task.tasks),
     99#ifdef CONFIG_SMP
    100	.pushable_tasks	= PLIST_NODE_INIT(init_task.pushable_tasks, MAX_PRIO),
    101#endif
    102#ifdef CONFIG_CGROUP_SCHED
    103	.sched_task_group = &root_task_group,
    104#endif
    105	.ptraced	= LIST_HEAD_INIT(init_task.ptraced),
    106	.ptrace_entry	= LIST_HEAD_INIT(init_task.ptrace_entry),
    107	.real_parent	= &init_task,
    108	.parent		= &init_task,
    109	.children	= LIST_HEAD_INIT(init_task.children),
    110	.sibling	= LIST_HEAD_INIT(init_task.sibling),
    111	.group_leader	= &init_task,
    112	RCU_POINTER_INITIALIZER(real_cred, &init_cred),
    113	RCU_POINTER_INITIALIZER(cred, &init_cred),
    114	.comm		= INIT_TASK_COMM,
    115	.thread		= INIT_THREAD,
    116	.fs		= &init_fs,
    117	.files		= &init_files,
    118#ifdef CONFIG_IO_URING
    119	.io_uring	= NULL,
    120#endif
    121	.signal		= &init_signals,
    122	.sighand	= &init_sighand,
    123	.nsproxy	= &init_nsproxy,
    124	.pending	= {
    125		.list = LIST_HEAD_INIT(init_task.pending.list),
    126		.signal = {{0}}
    127	},
    128	.blocked	= {{0}},
    129	.alloc_lock	= __SPIN_LOCK_UNLOCKED(init_task.alloc_lock),
    130	.journal_info	= NULL,
    131	INIT_CPU_TIMERS(init_task)
    132	.pi_lock	= __RAW_SPIN_LOCK_UNLOCKED(init_task.pi_lock),
    133	.timer_slack_ns = 50000, /* 50 usec default slack */
    134	.thread_pid	= &init_struct_pid,
    135	.thread_group	= LIST_HEAD_INIT(init_task.thread_group),
    136	.thread_node	= LIST_HEAD_INIT(init_signals.thread_head),
    137#ifdef CONFIG_AUDIT
    138	.loginuid	= INVALID_UID,
    139	.sessionid	= AUDIT_SID_UNSET,
    140#endif
    141#ifdef CONFIG_PERF_EVENTS
    142	.perf_event_mutex = __MUTEX_INITIALIZER(init_task.perf_event_mutex),
    143	.perf_event_list = LIST_HEAD_INIT(init_task.perf_event_list),
    144#endif
    145#ifdef CONFIG_PREEMPT_RCU
    146	.rcu_read_lock_nesting = 0,
    147	.rcu_read_unlock_special.s = 0,
    148	.rcu_node_entry = LIST_HEAD_INIT(init_task.rcu_node_entry),
    149	.rcu_blocked_node = NULL,
    150#endif
    151#ifdef CONFIG_TASKS_RCU
    152	.rcu_tasks_holdout = false,
    153	.rcu_tasks_holdout_list = LIST_HEAD_INIT(init_task.rcu_tasks_holdout_list),
    154	.rcu_tasks_idle_cpu = -1,
    155#endif
    156#ifdef CONFIG_TASKS_TRACE_RCU
    157	.trc_reader_nesting = 0,
    158	.trc_reader_special.s = 0,
    159	.trc_holdout_list = LIST_HEAD_INIT(init_task.trc_holdout_list),
    160#endif
    161#ifdef CONFIG_CPUSETS
    162	.mems_allowed_seq = SEQCNT_SPINLOCK_ZERO(init_task.mems_allowed_seq,
    163						 &init_task.alloc_lock),
    164#endif
    165#ifdef CONFIG_RT_MUTEXES
    166	.pi_waiters	= RB_ROOT_CACHED,
    167	.pi_top_task	= NULL,
    168#endif
    169	INIT_PREV_CPUTIME(init_task)
    170#ifdef CONFIG_VIRT_CPU_ACCOUNTING_GEN
    171	.vtime.seqcount	= SEQCNT_ZERO(init_task.vtime_seqcount),
    172	.vtime.starttime = 0,
    173	.vtime.state	= VTIME_SYS,
    174#endif
    175#ifdef CONFIG_NUMA_BALANCING
    176	.numa_preferred_nid = NUMA_NO_NODE,
    177	.numa_group	= NULL,
    178	.numa_faults	= NULL,
    179#endif
    180#if defined(CONFIG_KASAN_GENERIC) || defined(CONFIG_KASAN_SW_TAGS)
    181	.kasan_depth	= 1,
    182#endif
    183#ifdef CONFIG_KCSAN
    184	.kcsan_ctx = {
    185		.scoped_accesses	= {LIST_POISON1, NULL},
    186	},
    187#endif
    188#ifdef CONFIG_TRACE_IRQFLAGS
    189	.softirqs_enabled = 1,
    190#endif
    191#ifdef CONFIG_LOCKDEP
    192	.lockdep_depth = 0, /* no locks held yet */
    193	.curr_chain_key = INITIAL_CHAIN_KEY,
    194	.lockdep_recursion = 0,
    195#endif
    196#ifdef CONFIG_FUNCTION_GRAPH_TRACER
    197	.ret_stack		= NULL,
    198	.tracing_graph_pause	= ATOMIC_INIT(0),
    199#endif
    200#if defined(CONFIG_TRACING) && defined(CONFIG_PREEMPTION)
    201	.trace_recursion = 0,
    202#endif
    203#ifdef CONFIG_LIVEPATCH
    204	.patch_state	= KLP_UNDEFINED,
    205#endif
    206#ifdef CONFIG_SECURITY
    207	.security	= NULL,
    208#endif
    209#ifdef CONFIG_SECCOMP_FILTER
    210	.seccomp	= { .filter_count = ATOMIC_INIT(0) },
    211#endif
    212};
    213EXPORT_SYMBOL(init_task);
    214
    215/*
    216 * Initial thread structure. Alignment of this is handled by a special
    217 * linker map entry.
    218 */
    219#ifndef CONFIG_THREAD_INFO_IN_TASK
    220struct thread_info init_thread_info __init_thread_info = INIT_THREAD_INFO(init_task);
    221#endif