From: kernel test robot <lkp@intel.com>
To: Pavel Tikhomirov <ptikhomirov@virtuozzo.com>,
Eric Biederman <ebiederm@xmission.com>,
Alexander Viro <viro@zeniv.linux.org.uk>,
Christian Brauner <brauner@kernel.org>,
Andrei Vagin <avagin@google.com>,
linux-kernel@vger.kernel.org
Cc: kbuild-all@lists.01.org,
Pavel Tikhomirov <ptikhomirov@virtuozzo.com>,
Kees Cook <keescook@chromium.org>, Ingo Molnar <mingo@redhat.com>,
Peter Zijlstra <peterz@infradead.org>,
Juri Lelli <juri.lelli@redhat.com>,
Vincent Guittot <vincent.guittot@linaro.org>,
Dietmar Eggemann <dietmar.eggemann@arm.com>,
Steven Rostedt <rostedt@goodmis.org>,
Ben Segall <bsegall@google.com>, Mel Gorman <mgorman@suse.de>,
Daniel Bristot de Oliveira <bristot@redhat.com>,
Valentin Schneider <vschneid@redhat.com>,
Andrew Morton <akpm@linux-foundation.org>,
Linux Memory Management List <linux-mm@kvack.org>,
linux-ia64@vger.kernel.org, linux-fsdevel@vger.kernel.org,
kernel@openvz.org
Subject: Re: [PATCH v3 1/2] Add CABA tree to task_struct
Date: Thu, 08 Sep 2022 21:29:11 +0000 [thread overview]
Message-ID: <202209090529.EL54HX2U-lkp@intel.com> (raw)
In-Reply-To: <20220908140313.313020-2-ptikhomirov@virtuozzo.com>
Hi Pavel,
Thank you for the patch! Perhaps something to improve:
[auto build test WARNING on shuah-kselftest/next]
[also build test WARNING on kees/for-next/execve tip/sched/core linus/master v6.0-rc4 next-20220908]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch#_base_tree_information]
url: https://github.com/intel-lab-lkp/linux/commits/Pavel-Tikhomirov/Introduce-CABA-helper-process-tree/20220908-220639
base: https://git.kernel.org/pub/scm/linux/kernel/git/shuah/linux-kselftest.git next
config: s390-randconfig-s043-20220907 (https://download.01.org/0day-ci/archive/20220909/202209090529.EL54HX2U-lkp@intel.com/config)
compiler: s390-linux-gcc (GCC) 12.1.0
reproduce:
wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
chmod +x ~/bin/make.cross
# apt-get install sparse
# sparse version: v0.6.4-39-gce1a6720-dirty
# https://github.com/intel-lab-lkp/linux/commit/17a897a33137d4f49f99c8be8d619f6f711fccdb
git remote add linux-review https://github.com/intel-lab-lkp/linux
git fetch --no-tags linux-review Pavel-Tikhomirov/Introduce-CABA-helper-process-tree/20220908-220639
git checkout 17a897a33137d4f49f99c8be8d619f6f711fccdb
# save the config file
mkdir build_dir && cp config build_dir/.config
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-12.1.0 make.cross C=1 CF='-fdiagnostic-prefix -D__CHECK_ENDIAN__' O=build_dir ARCH=s390 SHELL=/bin/bash
If you fix the issue, kindly add following tag where applicable
Reported-by: kernel test robot <lkp@intel.com>
sparse warnings: (new ones prefixed by >>)
kernel/fork.c:1307:22: sparse: sparse: incorrect type in assignment (different address spaces) @@ expected struct file *[assigned] old_exe_file @@ got struct file [noderef] __rcu *[assigned] __ret @@
kernel/fork.c:1307:22: sparse: expected struct file *[assigned] old_exe_file
kernel/fork.c:1307:22: sparse: got struct file [noderef] __rcu *[assigned] __ret
kernel/fork.c:1638:38: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected struct refcount_struct [usertype] *r @@ got struct refcount_struct [noderef] __rcu * @@
kernel/fork.c:1638:38: sparse: expected struct refcount_struct [usertype] *r
kernel/fork.c:1638:38: sparse: got struct refcount_struct [noderef] __rcu *
kernel/fork.c:1647:31: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected struct spinlock [usertype] *lock @@ got struct spinlock [noderef] __rcu * @@
kernel/fork.c:1647:31: sparse: expected struct spinlock [usertype] *lock
kernel/fork.c:1647:31: sparse: got struct spinlock [noderef] __rcu *
kernel/fork.c:1648:9: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void const * @@ got struct k_sigaction [noderef] __rcu * @@
kernel/fork.c:1648:9: sparse: expected void const *
kernel/fork.c:1648:9: sparse: got struct k_sigaction [noderef] __rcu *
kernel/fork.c:1648:9: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void const * @@ got struct k_sigaction [noderef] __rcu * @@
kernel/fork.c:1648:9: sparse: expected void const *
kernel/fork.c:1648:9: sparse: got struct k_sigaction [noderef] __rcu *
kernel/fork.c:1648:9: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void const * @@ got struct k_sigaction [noderef] __rcu * @@
kernel/fork.c:1648:9: sparse: expected void const *
kernel/fork.c:1648:9: sparse: got struct k_sigaction [noderef] __rcu *
kernel/fork.c:1649:33: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected struct spinlock [usertype] *lock @@ got struct spinlock [noderef] __rcu * @@
kernel/fork.c:1649:33: sparse: expected struct spinlock [usertype] *lock
kernel/fork.c:1649:33: sparse: got struct spinlock [noderef] __rcu *
kernel/fork.c:1742:9: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected struct arch_spinlock_t [usertype] *lp @@ got struct arch_spinlock_t [noderef] __rcu * @@
kernel/fork.c:1742:9: sparse: expected struct arch_spinlock_t [usertype] *lp
kernel/fork.c:1742:9: sparse: got struct arch_spinlock_t [noderef] __rcu *
kernel/fork.c:2077:31: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected struct spinlock [usertype] *lock @@ got struct spinlock [noderef] __rcu * @@
kernel/fork.c:2077:31: sparse: expected struct spinlock [usertype] *lock
kernel/fork.c:2077:31: sparse: got struct spinlock [noderef] __rcu *
kernel/fork.c:2081:33: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected struct spinlock [usertype] *lock @@ got struct spinlock [noderef] __rcu * @@
kernel/fork.c:2081:33: sparse: expected struct spinlock [usertype] *lock
kernel/fork.c:2081:33: sparse: got struct spinlock [noderef] __rcu *
kernel/fork.c:2403:32: sparse: sparse: incorrect type in assignment (different address spaces) @@ expected struct task_struct [noderef] __rcu *real_parent @@ got struct task_struct * @@
kernel/fork.c:2403:32: sparse: expected struct task_struct [noderef] __rcu *real_parent
kernel/fork.c:2403:32: sparse: got struct task_struct *
>> kernel/fork.c:2407:17: sparse: sparse: incorrect type in assignment (different address spaces) @@ expected struct task_struct [noderef] __rcu *caba @@ got struct task_struct * @@
kernel/fork.c:2407:17: sparse: expected struct task_struct [noderef] __rcu *caba
kernel/fork.c:2407:17: sparse: got struct task_struct *
kernel/fork.c:2413:27: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected struct spinlock [usertype] *lock @@ got struct spinlock [noderef] __rcu * @@
kernel/fork.c:2413:27: sparse: expected struct spinlock [usertype] *lock
kernel/fork.c:2413:27: sparse: got struct spinlock [noderef] __rcu *
kernel/fork.c:2460:54: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected struct list_head *head @@ got struct list_head [noderef] __rcu * @@
kernel/fork.c:2460:54: sparse: expected struct list_head *head
kernel/fork.c:2460:54: sparse: got struct list_head [noderef] __rcu *
kernel/fork.c:2461:51: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected struct list_head *head @@ got struct list_head [noderef] __rcu * @@
kernel/fork.c:2461:51: sparse: expected struct list_head *head
kernel/fork.c:2461:51: sparse: got struct list_head [noderef] __rcu *
kernel/fork.c:2482:29: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected struct spinlock [usertype] *lock @@ got struct spinlock [noderef] __rcu * @@
kernel/fork.c:2482:29: sparse: expected struct spinlock [usertype] *lock
kernel/fork.c:2482:29: sparse: got struct spinlock [noderef] __rcu *
kernel/fork.c:2503:29: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected struct spinlock [usertype] *lock @@ got struct spinlock [noderef] __rcu * @@
kernel/fork.c:2503:29: sparse: expected struct spinlock [usertype] *lock
kernel/fork.c:2503:29: sparse: got struct spinlock [noderef] __rcu *
kernel/fork.c:2530:28: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected struct sighand_struct *sighand @@ got struct sighand_struct [noderef] __rcu *sighand @@
kernel/fork.c:2530:28: sparse: expected struct sighand_struct *sighand
kernel/fork.c:2530:28: sparse: got struct sighand_struct [noderef] __rcu *sighand
kernel/fork.c:2559:31: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected struct spinlock [usertype] *lock @@ got struct spinlock [noderef] __rcu * @@
kernel/fork.c:2559:31: sparse: expected struct spinlock [usertype] *lock
kernel/fork.c:2559:31: sparse: got struct spinlock [noderef] __rcu *
kernel/fork.c:2561:33: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected struct spinlock [usertype] *lock @@ got struct spinlock [noderef] __rcu * @@
kernel/fork.c:2561:33: sparse: expected struct spinlock [usertype] *lock
kernel/fork.c:2561:33: sparse: got struct spinlock [noderef] __rcu *
kernel/fork.c:2997:24: sparse: sparse: incorrect type in assignment (different address spaces) @@ expected struct task_struct *[assigned] parent @@ got struct task_struct [noderef] __rcu *real_parent @@
kernel/fork.c:2997:24: sparse: expected struct task_struct *[assigned] parent
kernel/fork.c:2997:24: sparse: got struct task_struct [noderef] __rcu *real_parent
kernel/fork.c:3078:43: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected struct refcount_struct const [usertype] *r @@ got struct refcount_struct [noderef] __rcu * @@
kernel/fork.c:3078:43: sparse: expected struct refcount_struct const [usertype] *r
kernel/fork.c:3078:43: sparse: got struct refcount_struct [noderef] __rcu *
kernel/fork.c:2122:22: sparse: sparse: dereference of noderef expression
kernel/fork.c: note: in included file (through arch/s390/include/asm/stacktrace.h, arch/s390/include/asm/perf_event.h, include/linux/perf_event.h, ...):
include/linux/ptrace.h:210:45: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected struct task_struct *new_parent @@ got struct task_struct [noderef] __rcu *parent @@
include/linux/ptrace.h:210:45: sparse: expected struct task_struct *new_parent
include/linux/ptrace.h:210:45: sparse: got struct task_struct [noderef] __rcu *parent
include/linux/ptrace.h:210:62: sparse: sparse: incorrect type in argument 3 (different address spaces) @@ expected struct cred const *ptracer_cred @@ got struct cred const [noderef] __rcu *ptracer_cred @@
include/linux/ptrace.h:210:62: sparse: expected struct cred const *ptracer_cred
include/linux/ptrace.h:210:62: sparse: got struct cred const [noderef] __rcu *ptracer_cred
kernel/fork.c:2458:59: sparse: sparse: dereference of noderef expression
kernel/fork.c:2459:59: sparse: sparse: dereference of noderef expression
--
>> kernel/exit.c:84:26: sparse: sparse: incorrect type in assignment (different address spaces) @@ expected struct task_struct *[assigned] new_caba @@ got struct task_struct [noderef] __rcu *caba @@
kernel/exit.c:84:26: sparse: expected struct task_struct *[assigned] new_caba
kernel/exit.c:84:26: sparse: got struct task_struct [noderef] __rcu *caba
kernel/exit.c:302:37: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected struct task_struct *tsk @@ got struct task_struct [noderef] __rcu *real_parent @@
kernel/exit.c:302:37: sparse: expected struct task_struct *tsk
kernel/exit.c:302:37: sparse: got struct task_struct [noderef] __rcu *real_parent
kernel/exit.c:305:32: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected struct task_struct *task @@ got struct task_struct [noderef] __rcu *real_parent @@
kernel/exit.c:305:32: sparse: expected struct task_struct *task
kernel/exit.c:305:32: sparse: got struct task_struct [noderef] __rcu *real_parent
kernel/exit.c:306:35: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected struct task_struct *task @@ got struct task_struct [noderef] __rcu *real_parent @@
kernel/exit.c:306:35: sparse: expected struct task_struct *task
kernel/exit.c:306:35: sparse: got struct task_struct [noderef] __rcu *real_parent
kernel/exit.c:351:24: sparse: sparse: incorrect type in assignment (different address spaces) @@ expected struct task_struct *parent @@ got struct task_struct [noderef] __rcu *real_parent @@
kernel/exit.c:351:24: sparse: expected struct task_struct *parent
kernel/exit.c:351:24: sparse: got struct task_struct [noderef] __rcu *real_parent
kernel/exit.c:378:27: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected struct spinlock [usertype] *lock @@ got struct spinlock [noderef] __rcu * @@
kernel/exit.c:378:27: sparse: expected struct spinlock [usertype] *lock
kernel/exit.c:378:27: sparse: got struct spinlock [noderef] __rcu *
kernel/exit.c:381:29: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected struct spinlock [usertype] *lock @@ got struct spinlock [noderef] __rcu * @@
kernel/exit.c:381:29: sparse: expected struct spinlock [usertype] *lock
kernel/exit.c:381:29: sparse: got struct spinlock [noderef] __rcu *
kernel/exit.c:604:29: sparse: sparse: incorrect type in assignment (different address spaces) @@ expected struct task_struct *reaper @@ got struct task_struct [noderef] __rcu *real_parent @@
kernel/exit.c:604:29: sparse: expected struct task_struct *reaper
kernel/exit.c:604:29: sparse: got struct task_struct [noderef] __rcu *real_parent
kernel/exit.c:606:29: sparse: sparse: incorrect type in assignment (different address spaces) @@ expected struct task_struct *reaper @@ got struct task_struct [noderef] __rcu *real_parent @@
kernel/exit.c:606:29: sparse: expected struct task_struct *reaper
kernel/exit.c:606:29: sparse: got struct task_struct [noderef] __rcu *real_parent
kernel/exit.c:930:63: sparse: sparse: incorrect type in initializer (different address spaces) @@ expected struct sighand_struct *const sighand @@ got struct sighand_struct [noderef] __rcu *sighand @@
kernel/exit.c:930:63: sparse: expected struct sighand_struct *const sighand
kernel/exit.c:930:63: sparse: got struct sighand_struct [noderef] __rcu *sighand
kernel/exit.c:1085:39: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected struct spinlock [usertype] *lock @@ got struct spinlock [noderef] __rcu * @@
kernel/exit.c:1085:39: sparse: expected struct spinlock [usertype] *lock
kernel/exit.c:1085:39: sparse: got struct spinlock [noderef] __rcu *
kernel/exit.c:1110:41: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected struct spinlock [usertype] *lock @@ got struct spinlock [noderef] __rcu * @@
kernel/exit.c:1110:41: sparse: expected struct spinlock [usertype] *lock
kernel/exit.c:1110:41: sparse: got struct spinlock [noderef] __rcu *
kernel/exit.c:1199:25: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected struct spinlock [usertype] *lock @@ got struct spinlock [noderef] __rcu * @@
kernel/exit.c:1199:25: sparse: expected struct spinlock [usertype] *lock
kernel/exit.c:1199:25: sparse: got struct spinlock [noderef] __rcu *
kernel/exit.c:1214:27: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected struct spinlock [usertype] *lock @@ got struct spinlock [noderef] __rcu * @@
kernel/exit.c:1214:27: sparse: expected struct spinlock [usertype] *lock
kernel/exit.c:1214:27: sparse: got struct spinlock [noderef] __rcu *
kernel/exit.c:1265:25: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected struct spinlock [usertype] *lock @@ got struct spinlock [noderef] __rcu * @@
kernel/exit.c:1265:25: sparse: expected struct spinlock [usertype] *lock
kernel/exit.c:1265:25: sparse: got struct spinlock [noderef] __rcu *
kernel/exit.c:1268:35: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected struct spinlock [usertype] *lock @@ got struct spinlock [noderef] __rcu * @@
kernel/exit.c:1268:35: sparse: expected struct spinlock [usertype] *lock
kernel/exit.c:1268:35: sparse: got struct spinlock [noderef] __rcu *
kernel/exit.c:1274:27: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected struct spinlock [usertype] *lock @@ got struct spinlock [noderef] __rcu * @@
kernel/exit.c:1274:27: sparse: expected struct spinlock [usertype] *lock
kernel/exit.c:1274:27: sparse: got struct spinlock [noderef] __rcu *
kernel/exit.c:1455:59: sparse: sparse: incompatible types in comparison expression (different base types):
kernel/exit.c:1455:59: sparse: void *
kernel/exit.c:1455:59: sparse: struct task_struct [noderef] __rcu *
kernel/exit.c:1471:25: sparse: sparse: incorrect type in initializer (different address spaces) @@ expected struct task_struct *parent @@ got struct task_struct [noderef] __rcu * @@
kernel/exit.c:1471:25: sparse: expected struct task_struct *parent
kernel/exit.c:1471:25: sparse: got struct task_struct [noderef] __rcu *
kernel/exit.c: note: in included file:
include/linux/ptrace.h:92:40: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected struct task_struct *p1 @@ got struct task_struct [noderef] __rcu *real_parent @@
include/linux/ptrace.h:92:40: sparse: expected struct task_struct *p1
include/linux/ptrace.h:92:40: sparse: got struct task_struct [noderef] __rcu *real_parent
include/linux/ptrace.h:92:60: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected struct task_struct *p2 @@ got struct task_struct [noderef] __rcu *parent @@
include/linux/ptrace.h:92:60: sparse: expected struct task_struct *p2
include/linux/ptrace.h:92:60: sparse: got struct task_struct [noderef] __rcu *parent
include/linux/ptrace.h:92:40: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected struct task_struct *p1 @@ got struct task_struct [noderef] __rcu *real_parent @@
include/linux/ptrace.h:92:40: sparse: expected struct task_struct *p1
include/linux/ptrace.h:92:40: sparse: got struct task_struct [noderef] __rcu *real_parent
include/linux/ptrace.h:92:60: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected struct task_struct *p2 @@ got struct task_struct [noderef] __rcu *parent @@
include/linux/ptrace.h:92:60: sparse: expected struct task_struct *p2
include/linux/ptrace.h:92:60: sparse: got struct task_struct [noderef] __rcu *parent
kernel/exit.c: note: in included file (through include/linux/sched/signal.h, include/linux/rcuwait.h, include/linux/percpu-rwsem.h, ...):
include/linux/sched/task.h:110:21: sparse: sparse: context imbalance in 'wait_task_zombie' - unexpected unlock
include/linux/sched/task.h:110:21: sparse: sparse: context imbalance in 'wait_task_stopped' - unexpected unlock
include/linux/sched/task.h:110:21: sparse: sparse: context imbalance in 'wait_task_continued' - unexpected unlock
kernel/exit.c: note: in included file:
include/linux/ptrace.h:92:40: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected struct task_struct *p1 @@ got struct task_struct [noderef] __rcu *real_parent @@
include/linux/ptrace.h:92:40: sparse: expected struct task_struct *p1
include/linux/ptrace.h:92:40: sparse: got struct task_struct [noderef] __rcu *real_parent
include/linux/ptrace.h:92:60: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected struct task_struct *p2 @@ got struct task_struct [noderef] __rcu *parent @@
include/linux/ptrace.h:92:60: sparse: expected struct task_struct *p2
include/linux/ptrace.h:92:60: sparse: got struct task_struct [noderef] __rcu *parent
kernel/exit.c:1563:9: sparse: sparse: context imbalance in 'do_wait' - wrong count at exit
--
init/init_task.c:107:28: sparse: sparse: incorrect type in initializer (different address spaces) @@ expected struct task_struct [noderef] __rcu *real_parent @@ got struct task_struct * @@
init/init_task.c:107:28: sparse: expected struct task_struct [noderef] __rcu *real_parent
init/init_task.c:107:28: sparse: got struct task_struct *
init/init_task.c:108:28: sparse: sparse: incorrect type in initializer (different address spaces) @@ expected struct task_struct [noderef] __rcu *parent @@ got struct task_struct * @@
init/init_task.c:108:28: sparse: expected struct task_struct [noderef] __rcu *parent
init/init_task.c:108:28: sparse: got struct task_struct *
>> init/init_task.c:112:28: sparse: sparse: incorrect type in initializer (different address spaces) @@ expected struct task_struct [noderef] __rcu *caba @@ got struct task_struct * @@
init/init_task.c:112:28: sparse: expected struct task_struct [noderef] __rcu *caba
init/init_task.c:112:28: sparse: got struct task_struct *
init/init_task.c:125:28: sparse: sparse: incorrect type in initializer (different address spaces) @@ expected struct sighand_struct [noderef] __rcu *sighand @@ got struct sighand_struct * @@
init/init_task.c:125:28: sparse: expected struct sighand_struct [noderef] __rcu *sighand
init/init_task.c:125:28: sparse: got struct sighand_struct *
vim +2407 kernel/fork.c
2355
2356 /*
2357 * Ensure that the cgroup subsystem policies allow the new process to be
2358 * forked. It should be noted that the new process's css_set can be changed
2359 * between here and cgroup_post_fork() if an organisation operation is in
2360 * progress.
2361 */
2362 retval = cgroup_can_fork(p, args);
2363 if (retval)
2364 goto bad_fork_put_pidfd;
2365
2366 /*
2367 * Now that the cgroups are pinned, re-clone the parent cgroup and put
2368 * the new task on the correct runqueue. All this *before* the task
2369 * becomes visible.
2370 *
2371 * This isn't part of ->can_fork() because while the re-cloning is
2372 * cgroup specific, it unconditionally needs to place the task on a
2373 * runqueue.
2374 */
2375 sched_cgroup_fork(p, args);
2376
2377 /*
2378 * From this point on we must avoid any synchronous user-space
2379 * communication until we take the tasklist-lock. In particular, we do
2380 * not want user-space to be able to predict the process start-time by
2381 * stalling fork(2) after we recorded the start_time but before it is
2382 * visible to the system.
2383 */
2384
2385 p->start_time = ktime_get_ns();
2386 p->start_boottime = ktime_get_boottime_ns();
2387
2388 /*
2389 * Make it visible to the rest of the system, but dont wake it up yet.
2390 * Need tasklist lock for parent etc handling!
2391 */
2392 write_lock_irq(&tasklist_lock);
2393
2394 /* CLONE_PARENT re-uses the old parent */
2395 if (clone_flags & (CLONE_PARENT|CLONE_THREAD)) {
2396 p->real_parent = current->real_parent;
2397 p->parent_exec_id = current->parent_exec_id;
2398 if (clone_flags & CLONE_THREAD)
2399 p->exit_signal = -1;
2400 else
2401 p->exit_signal = current->group_leader->exit_signal;
2402 } else {
2403 p->real_parent = current;
2404 p->parent_exec_id = current->self_exec_id;
2405 p->exit_signal = args->exit_signal;
2406 }
> 2407 p->caba = current;
2408
2409 klp_copy_process(p);
2410
2411 sched_core_fork(p);
2412
2413 spin_lock(¤t->sighand->siglock);
2414
2415 /*
2416 * Copy seccomp details explicitly here, in case they were changed
2417 * before holding sighand lock.
2418 */
2419 copy_seccomp(p);
2420
2421 rv_task_fork(p);
2422
2423 rseq_fork(p, clone_flags);
2424
2425 /* Don't start children in a dying pid namespace */
2426 if (unlikely(!(ns_of_pid(pid)->pid_allocated & PIDNS_ADDING))) {
2427 retval = -ENOMEM;
2428 goto bad_fork_cancel_cgroup;
2429 }
2430
2431 /* Let kill terminate clone/fork in the middle */
2432 if (fatal_signal_pending(current)) {
2433 retval = -EINTR;
2434 goto bad_fork_cancel_cgroup;
2435 }
2436
2437 init_task_pid_links(p);
2438 if (likely(p->pid)) {
2439 ptrace_init_task(p, (clone_flags & CLONE_PTRACE) || trace);
2440
2441 init_task_pid(p, PIDTYPE_PID, pid);
2442 if (thread_group_leader(p)) {
2443 init_task_pid(p, PIDTYPE_TGID, pid);
2444 init_task_pid(p, PIDTYPE_PGID, task_pgrp(current));
2445 init_task_pid(p, PIDTYPE_SID, task_session(current));
2446
2447 if (is_child_reaper(pid)) {
2448 ns_of_pid(pid)->child_reaper = p;
2449 p->signal->flags |= SIGNAL_UNKILLABLE;
2450 }
2451 p->signal->shared_pending.signal = delayed.signal;
2452 p->signal->tty = tty_kref_get(current->signal->tty);
2453 /*
2454 * Inherit has_child_subreaper flag under the same
2455 * tasklist_lock with adding child to the process tree
2456 * for propagate_has_child_subreaper optimization.
2457 */
2458 p->signal->has_child_subreaper = p->real_parent->signal->has_child_subreaper ||
2459 p->real_parent->signal->is_child_subreaper;
2460 list_add_tail(&p->sibling, &p->real_parent->children);
2461 list_add_tail(&p->cabd, &p->caba->cabds);
2462 list_add_tail_rcu(&p->tasks, &init_task.tasks);
2463 attach_pid(p, PIDTYPE_TGID);
2464 attach_pid(p, PIDTYPE_PGID);
2465 attach_pid(p, PIDTYPE_SID);
2466 __this_cpu_inc(process_counts);
2467 } else {
2468 current->signal->nr_threads++;
2469 atomic_inc(¤t->signal->live);
2470 refcount_inc(¤t->signal->sigcnt);
2471 task_join_group_stop(p);
2472 list_add_tail_rcu(&p->thread_group,
2473 &p->group_leader->thread_group);
2474 list_add_tail_rcu(&p->thread_node,
2475 &p->signal->thread_head);
2476 }
2477 attach_pid(p, PIDTYPE_PID);
2478 nr_threads++;
2479 }
2480 total_forks++;
2481 hlist_del_init(&delayed.node);
2482 spin_unlock(¤t->sighand->siglock);
2483 syscall_tracepoint_update(p);
2484 write_unlock_irq(&tasklist_lock);
2485
2486 if (pidfile)
2487 fd_install(pidfd, pidfile);
2488
2489 proc_fork_connector(p);
2490 sched_post_fork(p);
2491 cgroup_post_fork(p, args);
2492 perf_event_fork(p);
2493
2494 trace_task_newtask(p, clone_flags);
2495 uprobe_copy_process(p, clone_flags);
2496
2497 copy_oom_score_adj(clone_flags, p);
2498
2499 return p;
2500
2501 bad_fork_cancel_cgroup:
2502 sched_core_free(p);
2503 spin_unlock(¤t->sighand->siglock);
2504 write_unlock_irq(&tasklist_lock);
2505 cgroup_cancel_fork(p, args);
2506 bad_fork_put_pidfd:
2507 if (clone_flags & CLONE_PIDFD) {
2508 fput(pidfile);
2509 put_unused_fd(pidfd);
2510 }
2511 bad_fork_free_pid:
2512 if (pid != &init_struct_pid)
2513 free_pid(pid);
2514 bad_fork_cleanup_thread:
2515 exit_thread(p);
2516 bad_fork_cleanup_io:
2517 if (p->io_context)
2518 exit_io_context(p);
2519 bad_fork_cleanup_namespaces:
2520 exit_task_namespaces(p);
2521 bad_fork_cleanup_mm:
2522 if (p->mm) {
2523 mm_clear_owner(p->mm, p);
2524 mmput(p->mm);
2525 }
2526 bad_fork_cleanup_signal:
2527 if (!(clone_flags & CLONE_THREAD))
2528 free_signal_struct(p->signal);
2529 bad_fork_cleanup_sighand:
2530 __cleanup_sighand(p->sighand);
2531 bad_fork_cleanup_fs:
2532 exit_fs(p); /* blocking */
2533 bad_fork_cleanup_files:
2534 exit_files(p); /* blocking */
2535 bad_fork_cleanup_semundo:
2536 exit_sem(p);
2537 bad_fork_cleanup_security:
2538 security_task_free(p);
2539 bad_fork_cleanup_audit:
2540 audit_free(p);
2541 bad_fork_cleanup_perf:
2542 perf_event_free_task(p);
2543 bad_fork_cleanup_policy:
2544 lockdep_free_task(p);
2545 #ifdef CONFIG_NUMA
2546 mpol_put(p->mempolicy);
2547 #endif
2548 bad_fork_cleanup_delayacct:
2549 delayacct_tsk_free(p);
2550 bad_fork_cleanup_count:
2551 dec_rlimit_ucounts(task_ucounts(p), UCOUNT_RLIMIT_NPROC, 1);
2552 exit_creds(p);
2553 bad_fork_free:
2554 WRITE_ONCE(p->__state, TASK_DEAD);
2555 exit_task_stack_account(p);
2556 put_task_stack(p);
2557 delayed_free_task(p);
2558 fork_out:
2559 spin_lock_irq(¤t->sighand->siglock);
2560 hlist_del_init(&delayed.node);
2561 spin_unlock_irq(¤t->sighand->siglock);
2562 return ERR_PTR(retval);
2563 }
2564
--
0-DAY CI Kernel Test Service
https://01.org/lkp
WARNING: multiple messages have this Message-ID (diff)
From: kernel test robot <lkp@intel.com>
To: Pavel Tikhomirov <ptikhomirov@virtuozzo.com>,
Eric Biederman <ebiederm@xmission.com>,
Alexander Viro <viro@zeniv.linux.org.uk>,
Christian Brauner <brauner@kernel.org>,
Andrei Vagin <avagin@google.com>,
linux-kernel@vger.kernel.org
Cc: kbuild-all@lists.01.org,
Pavel Tikhomirov <ptikhomirov@virtuozzo.com>,
Kees Cook <keescook@chromium.org>, Ingo Molnar <mingo@redhat.com>,
Peter Zijlstra <peterz@infradead.org>,
Juri Lelli <juri.lelli@redhat.com>,
Vincent Guittot <vincent.guittot@linaro.org>,
Dietmar Eggemann <dietmar.eggemann@arm.com>,
Steven Rostedt <rostedt@goodmis.org>,
Ben Segall <bsegall@google.com>, Mel Gorman <mgorman@suse.de>,
Daniel Bristot de Oliveira <bristot@redhat.com>,
Valentin Schneider <vschneid@redhat.com>,
Andrew Morton <akpm@linux-foundation.org>,
Linux Memory Management List <linux-mm@kvack.org>,
linux-ia64@vger.kernel.org, linux-fsdevel@vger.kernel.org,
kernel@openvz.org
Subject: Re: [PATCH v3 1/2] Add CABA tree to task_struct
Date: Fri, 9 Sep 2022 05:29:11 +0800 [thread overview]
Message-ID: <202209090529.EL54HX2U-lkp@intel.com> (raw)
In-Reply-To: <20220908140313.313020-2-ptikhomirov@virtuozzo.com>
Hi Pavel,
Thank you for the patch! Perhaps something to improve:
[auto build test WARNING on shuah-kselftest/next]
[also build test WARNING on kees/for-next/execve tip/sched/core linus/master v6.0-rc4 next-20220908]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch#_base_tree_information]
url: https://github.com/intel-lab-lkp/linux/commits/Pavel-Tikhomirov/Introduce-CABA-helper-process-tree/20220908-220639
base: https://git.kernel.org/pub/scm/linux/kernel/git/shuah/linux-kselftest.git next
config: s390-randconfig-s043-20220907 (https://download.01.org/0day-ci/archive/20220909/202209090529.EL54HX2U-lkp@intel.com/config)
compiler: s390-linux-gcc (GCC) 12.1.0
reproduce:
wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
chmod +x ~/bin/make.cross
# apt-get install sparse
# sparse version: v0.6.4-39-gce1a6720-dirty
# https://github.com/intel-lab-lkp/linux/commit/17a897a33137d4f49f99c8be8d619f6f711fccdb
git remote add linux-review https://github.com/intel-lab-lkp/linux
git fetch --no-tags linux-review Pavel-Tikhomirov/Introduce-CABA-helper-process-tree/20220908-220639
git checkout 17a897a33137d4f49f99c8be8d619f6f711fccdb
# save the config file
mkdir build_dir && cp config build_dir/.config
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-12.1.0 make.cross C=1 CF='-fdiagnostic-prefix -D__CHECK_ENDIAN__' O=build_dir ARCH=s390 SHELL=/bin/bash
If you fix the issue, kindly add following tag where applicable
Reported-by: kernel test robot <lkp@intel.com>
sparse warnings: (new ones prefixed by >>)
kernel/fork.c:1307:22: sparse: sparse: incorrect type in assignment (different address spaces) @@ expected struct file *[assigned] old_exe_file @@ got struct file [noderef] __rcu *[assigned] __ret @@
kernel/fork.c:1307:22: sparse: expected struct file *[assigned] old_exe_file
kernel/fork.c:1307:22: sparse: got struct file [noderef] __rcu *[assigned] __ret
kernel/fork.c:1638:38: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected struct refcount_struct [usertype] *r @@ got struct refcount_struct [noderef] __rcu * @@
kernel/fork.c:1638:38: sparse: expected struct refcount_struct [usertype] *r
kernel/fork.c:1638:38: sparse: got struct refcount_struct [noderef] __rcu *
kernel/fork.c:1647:31: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected struct spinlock [usertype] *lock @@ got struct spinlock [noderef] __rcu * @@
kernel/fork.c:1647:31: sparse: expected struct spinlock [usertype] *lock
kernel/fork.c:1647:31: sparse: got struct spinlock [noderef] __rcu *
kernel/fork.c:1648:9: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void const * @@ got struct k_sigaction [noderef] __rcu * @@
kernel/fork.c:1648:9: sparse: expected void const *
kernel/fork.c:1648:9: sparse: got struct k_sigaction [noderef] __rcu *
kernel/fork.c:1648:9: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void const * @@ got struct k_sigaction [noderef] __rcu * @@
kernel/fork.c:1648:9: sparse: expected void const *
kernel/fork.c:1648:9: sparse: got struct k_sigaction [noderef] __rcu *
kernel/fork.c:1648:9: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void const * @@ got struct k_sigaction [noderef] __rcu * @@
kernel/fork.c:1648:9: sparse: expected void const *
kernel/fork.c:1648:9: sparse: got struct k_sigaction [noderef] __rcu *
kernel/fork.c:1649:33: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected struct spinlock [usertype] *lock @@ got struct spinlock [noderef] __rcu * @@
kernel/fork.c:1649:33: sparse: expected struct spinlock [usertype] *lock
kernel/fork.c:1649:33: sparse: got struct spinlock [noderef] __rcu *
kernel/fork.c:1742:9: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected struct arch_spinlock_t [usertype] *lp @@ got struct arch_spinlock_t [noderef] __rcu * @@
kernel/fork.c:1742:9: sparse: expected struct arch_spinlock_t [usertype] *lp
kernel/fork.c:1742:9: sparse: got struct arch_spinlock_t [noderef] __rcu *
kernel/fork.c:2077:31: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected struct spinlock [usertype] *lock @@ got struct spinlock [noderef] __rcu * @@
kernel/fork.c:2077:31: sparse: expected struct spinlock [usertype] *lock
kernel/fork.c:2077:31: sparse: got struct spinlock [noderef] __rcu *
kernel/fork.c:2081:33: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected struct spinlock [usertype] *lock @@ got struct spinlock [noderef] __rcu * @@
kernel/fork.c:2081:33: sparse: expected struct spinlock [usertype] *lock
kernel/fork.c:2081:33: sparse: got struct spinlock [noderef] __rcu *
kernel/fork.c:2403:32: sparse: sparse: incorrect type in assignment (different address spaces) @@ expected struct task_struct [noderef] __rcu *real_parent @@ got struct task_struct * @@
kernel/fork.c:2403:32: sparse: expected struct task_struct [noderef] __rcu *real_parent
kernel/fork.c:2403:32: sparse: got struct task_struct *
>> kernel/fork.c:2407:17: sparse: sparse: incorrect type in assignment (different address spaces) @@ expected struct task_struct [noderef] __rcu *caba @@ got struct task_struct * @@
kernel/fork.c:2407:17: sparse: expected struct task_struct [noderef] __rcu *caba
kernel/fork.c:2407:17: sparse: got struct task_struct *
kernel/fork.c:2413:27: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected struct spinlock [usertype] *lock @@ got struct spinlock [noderef] __rcu * @@
kernel/fork.c:2413:27: sparse: expected struct spinlock [usertype] *lock
kernel/fork.c:2413:27: sparse: got struct spinlock [noderef] __rcu *
kernel/fork.c:2460:54: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected struct list_head *head @@ got struct list_head [noderef] __rcu * @@
kernel/fork.c:2460:54: sparse: expected struct list_head *head
kernel/fork.c:2460:54: sparse: got struct list_head [noderef] __rcu *
kernel/fork.c:2461:51: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected struct list_head *head @@ got struct list_head [noderef] __rcu * @@
kernel/fork.c:2461:51: sparse: expected struct list_head *head
kernel/fork.c:2461:51: sparse: got struct list_head [noderef] __rcu *
kernel/fork.c:2482:29: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected struct spinlock [usertype] *lock @@ got struct spinlock [noderef] __rcu * @@
kernel/fork.c:2482:29: sparse: expected struct spinlock [usertype] *lock
kernel/fork.c:2482:29: sparse: got struct spinlock [noderef] __rcu *
kernel/fork.c:2503:29: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected struct spinlock [usertype] *lock @@ got struct spinlock [noderef] __rcu * @@
kernel/fork.c:2503:29: sparse: expected struct spinlock [usertype] *lock
kernel/fork.c:2503:29: sparse: got struct spinlock [noderef] __rcu *
kernel/fork.c:2530:28: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected struct sighand_struct *sighand @@ got struct sighand_struct [noderef] __rcu *sighand @@
kernel/fork.c:2530:28: sparse: expected struct sighand_struct *sighand
kernel/fork.c:2530:28: sparse: got struct sighand_struct [noderef] __rcu *sighand
kernel/fork.c:2559:31: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected struct spinlock [usertype] *lock @@ got struct spinlock [noderef] __rcu * @@
kernel/fork.c:2559:31: sparse: expected struct spinlock [usertype] *lock
kernel/fork.c:2559:31: sparse: got struct spinlock [noderef] __rcu *
kernel/fork.c:2561:33: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected struct spinlock [usertype] *lock @@ got struct spinlock [noderef] __rcu * @@
kernel/fork.c:2561:33: sparse: expected struct spinlock [usertype] *lock
kernel/fork.c:2561:33: sparse: got struct spinlock [noderef] __rcu *
kernel/fork.c:2997:24: sparse: sparse: incorrect type in assignment (different address spaces) @@ expected struct task_struct *[assigned] parent @@ got struct task_struct [noderef] __rcu *real_parent @@
kernel/fork.c:2997:24: sparse: expected struct task_struct *[assigned] parent
kernel/fork.c:2997:24: sparse: got struct task_struct [noderef] __rcu *real_parent
kernel/fork.c:3078:43: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected struct refcount_struct const [usertype] *r @@ got struct refcount_struct [noderef] __rcu * @@
kernel/fork.c:3078:43: sparse: expected struct refcount_struct const [usertype] *r
kernel/fork.c:3078:43: sparse: got struct refcount_struct [noderef] __rcu *
kernel/fork.c:2122:22: sparse: sparse: dereference of noderef expression
kernel/fork.c: note: in included file (through arch/s390/include/asm/stacktrace.h, arch/s390/include/asm/perf_event.h, include/linux/perf_event.h, ...):
include/linux/ptrace.h:210:45: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected struct task_struct *new_parent @@ got struct task_struct [noderef] __rcu *parent @@
include/linux/ptrace.h:210:45: sparse: expected struct task_struct *new_parent
include/linux/ptrace.h:210:45: sparse: got struct task_struct [noderef] __rcu *parent
include/linux/ptrace.h:210:62: sparse: sparse: incorrect type in argument 3 (different address spaces) @@ expected struct cred const *ptracer_cred @@ got struct cred const [noderef] __rcu *ptracer_cred @@
include/linux/ptrace.h:210:62: sparse: expected struct cred const *ptracer_cred
include/linux/ptrace.h:210:62: sparse: got struct cred const [noderef] __rcu *ptracer_cred
kernel/fork.c:2458:59: sparse: sparse: dereference of noderef expression
kernel/fork.c:2459:59: sparse: sparse: dereference of noderef expression
--
>> kernel/exit.c:84:26: sparse: sparse: incorrect type in assignment (different address spaces) @@ expected struct task_struct *[assigned] new_caba @@ got struct task_struct [noderef] __rcu *caba @@
kernel/exit.c:84:26: sparse: expected struct task_struct *[assigned] new_caba
kernel/exit.c:84:26: sparse: got struct task_struct [noderef] __rcu *caba
kernel/exit.c:302:37: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected struct task_struct *tsk @@ got struct task_struct [noderef] __rcu *real_parent @@
kernel/exit.c:302:37: sparse: expected struct task_struct *tsk
kernel/exit.c:302:37: sparse: got struct task_struct [noderef] __rcu *real_parent
kernel/exit.c:305:32: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected struct task_struct *task @@ got struct task_struct [noderef] __rcu *real_parent @@
kernel/exit.c:305:32: sparse: expected struct task_struct *task
kernel/exit.c:305:32: sparse: got struct task_struct [noderef] __rcu *real_parent
kernel/exit.c:306:35: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected struct task_struct *task @@ got struct task_struct [noderef] __rcu *real_parent @@
kernel/exit.c:306:35: sparse: expected struct task_struct *task
kernel/exit.c:306:35: sparse: got struct task_struct [noderef] __rcu *real_parent
kernel/exit.c:351:24: sparse: sparse: incorrect type in assignment (different address spaces) @@ expected struct task_struct *parent @@ got struct task_struct [noderef] __rcu *real_parent @@
kernel/exit.c:351:24: sparse: expected struct task_struct *parent
kernel/exit.c:351:24: sparse: got struct task_struct [noderef] __rcu *real_parent
kernel/exit.c:378:27: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected struct spinlock [usertype] *lock @@ got struct spinlock [noderef] __rcu * @@
kernel/exit.c:378:27: sparse: expected struct spinlock [usertype] *lock
kernel/exit.c:378:27: sparse: got struct spinlock [noderef] __rcu *
kernel/exit.c:381:29: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected struct spinlock [usertype] *lock @@ got struct spinlock [noderef] __rcu * @@
kernel/exit.c:381:29: sparse: expected struct spinlock [usertype] *lock
kernel/exit.c:381:29: sparse: got struct spinlock [noderef] __rcu *
kernel/exit.c:604:29: sparse: sparse: incorrect type in assignment (different address spaces) @@ expected struct task_struct *reaper @@ got struct task_struct [noderef] __rcu *real_parent @@
kernel/exit.c:604:29: sparse: expected struct task_struct *reaper
kernel/exit.c:604:29: sparse: got struct task_struct [noderef] __rcu *real_parent
kernel/exit.c:606:29: sparse: sparse: incorrect type in assignment (different address spaces) @@ expected struct task_struct *reaper @@ got struct task_struct [noderef] __rcu *real_parent @@
kernel/exit.c:606:29: sparse: expected struct task_struct *reaper
kernel/exit.c:606:29: sparse: got struct task_struct [noderef] __rcu *real_parent
kernel/exit.c:930:63: sparse: sparse: incorrect type in initializer (different address spaces) @@ expected struct sighand_struct *const sighand @@ got struct sighand_struct [noderef] __rcu *sighand @@
kernel/exit.c:930:63: sparse: expected struct sighand_struct *const sighand
kernel/exit.c:930:63: sparse: got struct sighand_struct [noderef] __rcu *sighand
kernel/exit.c:1085:39: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected struct spinlock [usertype] *lock @@ got struct spinlock [noderef] __rcu * @@
kernel/exit.c:1085:39: sparse: expected struct spinlock [usertype] *lock
kernel/exit.c:1085:39: sparse: got struct spinlock [noderef] __rcu *
kernel/exit.c:1110:41: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected struct spinlock [usertype] *lock @@ got struct spinlock [noderef] __rcu * @@
kernel/exit.c:1110:41: sparse: expected struct spinlock [usertype] *lock
kernel/exit.c:1110:41: sparse: got struct spinlock [noderef] __rcu *
kernel/exit.c:1199:25: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected struct spinlock [usertype] *lock @@ got struct spinlock [noderef] __rcu * @@
kernel/exit.c:1199:25: sparse: expected struct spinlock [usertype] *lock
kernel/exit.c:1199:25: sparse: got struct spinlock [noderef] __rcu *
kernel/exit.c:1214:27: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected struct spinlock [usertype] *lock @@ got struct spinlock [noderef] __rcu * @@
kernel/exit.c:1214:27: sparse: expected struct spinlock [usertype] *lock
kernel/exit.c:1214:27: sparse: got struct spinlock [noderef] __rcu *
kernel/exit.c:1265:25: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected struct spinlock [usertype] *lock @@ got struct spinlock [noderef] __rcu * @@
kernel/exit.c:1265:25: sparse: expected struct spinlock [usertype] *lock
kernel/exit.c:1265:25: sparse: got struct spinlock [noderef] __rcu *
kernel/exit.c:1268:35: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected struct spinlock [usertype] *lock @@ got struct spinlock [noderef] __rcu * @@
kernel/exit.c:1268:35: sparse: expected struct spinlock [usertype] *lock
kernel/exit.c:1268:35: sparse: got struct spinlock [noderef] __rcu *
kernel/exit.c:1274:27: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected struct spinlock [usertype] *lock @@ got struct spinlock [noderef] __rcu * @@
kernel/exit.c:1274:27: sparse: expected struct spinlock [usertype] *lock
kernel/exit.c:1274:27: sparse: got struct spinlock [noderef] __rcu *
kernel/exit.c:1455:59: sparse: sparse: incompatible types in comparison expression (different base types):
kernel/exit.c:1455:59: sparse: void *
kernel/exit.c:1455:59: sparse: struct task_struct [noderef] __rcu *
kernel/exit.c:1471:25: sparse: sparse: incorrect type in initializer (different address spaces) @@ expected struct task_struct *parent @@ got struct task_struct [noderef] __rcu * @@
kernel/exit.c:1471:25: sparse: expected struct task_struct *parent
kernel/exit.c:1471:25: sparse: got struct task_struct [noderef] __rcu *
kernel/exit.c: note: in included file:
include/linux/ptrace.h:92:40: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected struct task_struct *p1 @@ got struct task_struct [noderef] __rcu *real_parent @@
include/linux/ptrace.h:92:40: sparse: expected struct task_struct *p1
include/linux/ptrace.h:92:40: sparse: got struct task_struct [noderef] __rcu *real_parent
include/linux/ptrace.h:92:60: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected struct task_struct *p2 @@ got struct task_struct [noderef] __rcu *parent @@
include/linux/ptrace.h:92:60: sparse: expected struct task_struct *p2
include/linux/ptrace.h:92:60: sparse: got struct task_struct [noderef] __rcu *parent
include/linux/ptrace.h:92:40: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected struct task_struct *p1 @@ got struct task_struct [noderef] __rcu *real_parent @@
include/linux/ptrace.h:92:40: sparse: expected struct task_struct *p1
include/linux/ptrace.h:92:40: sparse: got struct task_struct [noderef] __rcu *real_parent
include/linux/ptrace.h:92:60: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected struct task_struct *p2 @@ got struct task_struct [noderef] __rcu *parent @@
include/linux/ptrace.h:92:60: sparse: expected struct task_struct *p2
include/linux/ptrace.h:92:60: sparse: got struct task_struct [noderef] __rcu *parent
kernel/exit.c: note: in included file (through include/linux/sched/signal.h, include/linux/rcuwait.h, include/linux/percpu-rwsem.h, ...):
include/linux/sched/task.h:110:21: sparse: sparse: context imbalance in 'wait_task_zombie' - unexpected unlock
include/linux/sched/task.h:110:21: sparse: sparse: context imbalance in 'wait_task_stopped' - unexpected unlock
include/linux/sched/task.h:110:21: sparse: sparse: context imbalance in 'wait_task_continued' - unexpected unlock
kernel/exit.c: note: in included file:
include/linux/ptrace.h:92:40: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected struct task_struct *p1 @@ got struct task_struct [noderef] __rcu *real_parent @@
include/linux/ptrace.h:92:40: sparse: expected struct task_struct *p1
include/linux/ptrace.h:92:40: sparse: got struct task_struct [noderef] __rcu *real_parent
include/linux/ptrace.h:92:60: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected struct task_struct *p2 @@ got struct task_struct [noderef] __rcu *parent @@
include/linux/ptrace.h:92:60: sparse: expected struct task_struct *p2
include/linux/ptrace.h:92:60: sparse: got struct task_struct [noderef] __rcu *parent
kernel/exit.c:1563:9: sparse: sparse: context imbalance in 'do_wait' - wrong count at exit
--
init/init_task.c:107:28: sparse: sparse: incorrect type in initializer (different address spaces) @@ expected struct task_struct [noderef] __rcu *real_parent @@ got struct task_struct * @@
init/init_task.c:107:28: sparse: expected struct task_struct [noderef] __rcu *real_parent
init/init_task.c:107:28: sparse: got struct task_struct *
init/init_task.c:108:28: sparse: sparse: incorrect type in initializer (different address spaces) @@ expected struct task_struct [noderef] __rcu *parent @@ got struct task_struct * @@
init/init_task.c:108:28: sparse: expected struct task_struct [noderef] __rcu *parent
init/init_task.c:108:28: sparse: got struct task_struct *
>> init/init_task.c:112:28: sparse: sparse: incorrect type in initializer (different address spaces) @@ expected struct task_struct [noderef] __rcu *caba @@ got struct task_struct * @@
init/init_task.c:112:28: sparse: expected struct task_struct [noderef] __rcu *caba
init/init_task.c:112:28: sparse: got struct task_struct *
init/init_task.c:125:28: sparse: sparse: incorrect type in initializer (different address spaces) @@ expected struct sighand_struct [noderef] __rcu *sighand @@ got struct sighand_struct * @@
init/init_task.c:125:28: sparse: expected struct sighand_struct [noderef] __rcu *sighand
init/init_task.c:125:28: sparse: got struct sighand_struct *
vim +2407 kernel/fork.c
2355
2356 /*
2357 * Ensure that the cgroup subsystem policies allow the new process to be
2358 * forked. It should be noted that the new process's css_set can be changed
2359 * between here and cgroup_post_fork() if an organisation operation is in
2360 * progress.
2361 */
2362 retval = cgroup_can_fork(p, args);
2363 if (retval)
2364 goto bad_fork_put_pidfd;
2365
2366 /*
2367 * Now that the cgroups are pinned, re-clone the parent cgroup and put
2368 * the new task on the correct runqueue. All this *before* the task
2369 * becomes visible.
2370 *
2371 * This isn't part of ->can_fork() because while the re-cloning is
2372 * cgroup specific, it unconditionally needs to place the task on a
2373 * runqueue.
2374 */
2375 sched_cgroup_fork(p, args);
2376
2377 /*
2378 * From this point on we must avoid any synchronous user-space
2379 * communication until we take the tasklist-lock. In particular, we do
2380 * not want user-space to be able to predict the process start-time by
2381 * stalling fork(2) after we recorded the start_time but before it is
2382 * visible to the system.
2383 */
2384
2385 p->start_time = ktime_get_ns();
2386 p->start_boottime = ktime_get_boottime_ns();
2387
2388 /*
2389 * Make it visible to the rest of the system, but dont wake it up yet.
2390 * Need tasklist lock for parent etc handling!
2391 */
2392 write_lock_irq(&tasklist_lock);
2393
2394 /* CLONE_PARENT re-uses the old parent */
2395 if (clone_flags & (CLONE_PARENT|CLONE_THREAD)) {
2396 p->real_parent = current->real_parent;
2397 p->parent_exec_id = current->parent_exec_id;
2398 if (clone_flags & CLONE_THREAD)
2399 p->exit_signal = -1;
2400 else
2401 p->exit_signal = current->group_leader->exit_signal;
2402 } else {
2403 p->real_parent = current;
2404 p->parent_exec_id = current->self_exec_id;
2405 p->exit_signal = args->exit_signal;
2406 }
> 2407 p->caba = current;
2408
2409 klp_copy_process(p);
2410
2411 sched_core_fork(p);
2412
2413 spin_lock(¤t->sighand->siglock);
2414
2415 /*
2416 * Copy seccomp details explicitly here, in case they were changed
2417 * before holding sighand lock.
2418 */
2419 copy_seccomp(p);
2420
2421 rv_task_fork(p);
2422
2423 rseq_fork(p, clone_flags);
2424
2425 /* Don't start children in a dying pid namespace */
2426 if (unlikely(!(ns_of_pid(pid)->pid_allocated & PIDNS_ADDING))) {
2427 retval = -ENOMEM;
2428 goto bad_fork_cancel_cgroup;
2429 }
2430
2431 /* Let kill terminate clone/fork in the middle */
2432 if (fatal_signal_pending(current)) {
2433 retval = -EINTR;
2434 goto bad_fork_cancel_cgroup;
2435 }
2436
2437 init_task_pid_links(p);
2438 if (likely(p->pid)) {
2439 ptrace_init_task(p, (clone_flags & CLONE_PTRACE) || trace);
2440
2441 init_task_pid(p, PIDTYPE_PID, pid);
2442 if (thread_group_leader(p)) {
2443 init_task_pid(p, PIDTYPE_TGID, pid);
2444 init_task_pid(p, PIDTYPE_PGID, task_pgrp(current));
2445 init_task_pid(p, PIDTYPE_SID, task_session(current));
2446
2447 if (is_child_reaper(pid)) {
2448 ns_of_pid(pid)->child_reaper = p;
2449 p->signal->flags |= SIGNAL_UNKILLABLE;
2450 }
2451 p->signal->shared_pending.signal = delayed.signal;
2452 p->signal->tty = tty_kref_get(current->signal->tty);
2453 /*
2454 * Inherit has_child_subreaper flag under the same
2455 * tasklist_lock with adding child to the process tree
2456 * for propagate_has_child_subreaper optimization.
2457 */
2458 p->signal->has_child_subreaper = p->real_parent->signal->has_child_subreaper ||
2459 p->real_parent->signal->is_child_subreaper;
2460 list_add_tail(&p->sibling, &p->real_parent->children);
2461 list_add_tail(&p->cabd, &p->caba->cabds);
2462 list_add_tail_rcu(&p->tasks, &init_task.tasks);
2463 attach_pid(p, PIDTYPE_TGID);
2464 attach_pid(p, PIDTYPE_PGID);
2465 attach_pid(p, PIDTYPE_SID);
2466 __this_cpu_inc(process_counts);
2467 } else {
2468 current->signal->nr_threads++;
2469 atomic_inc(¤t->signal->live);
2470 refcount_inc(¤t->signal->sigcnt);
2471 task_join_group_stop(p);
2472 list_add_tail_rcu(&p->thread_group,
2473 &p->group_leader->thread_group);
2474 list_add_tail_rcu(&p->thread_node,
2475 &p->signal->thread_head);
2476 }
2477 attach_pid(p, PIDTYPE_PID);
2478 nr_threads++;
2479 }
2480 total_forks++;
2481 hlist_del_init(&delayed.node);
2482 spin_unlock(¤t->sighand->siglock);
2483 syscall_tracepoint_update(p);
2484 write_unlock_irq(&tasklist_lock);
2485
2486 if (pidfile)
2487 fd_install(pidfd, pidfile);
2488
2489 proc_fork_connector(p);
2490 sched_post_fork(p);
2491 cgroup_post_fork(p, args);
2492 perf_event_fork(p);
2493
2494 trace_task_newtask(p, clone_flags);
2495 uprobe_copy_process(p, clone_flags);
2496
2497 copy_oom_score_adj(clone_flags, p);
2498
2499 return p;
2500
2501 bad_fork_cancel_cgroup:
2502 sched_core_free(p);
2503 spin_unlock(¤t->sighand->siglock);
2504 write_unlock_irq(&tasklist_lock);
2505 cgroup_cancel_fork(p, args);
2506 bad_fork_put_pidfd:
2507 if (clone_flags & CLONE_PIDFD) {
2508 fput(pidfile);
2509 put_unused_fd(pidfd);
2510 }
2511 bad_fork_free_pid:
2512 if (pid != &init_struct_pid)
2513 free_pid(pid);
2514 bad_fork_cleanup_thread:
2515 exit_thread(p);
2516 bad_fork_cleanup_io:
2517 if (p->io_context)
2518 exit_io_context(p);
2519 bad_fork_cleanup_namespaces:
2520 exit_task_namespaces(p);
2521 bad_fork_cleanup_mm:
2522 if (p->mm) {
2523 mm_clear_owner(p->mm, p);
2524 mmput(p->mm);
2525 }
2526 bad_fork_cleanup_signal:
2527 if (!(clone_flags & CLONE_THREAD))
2528 free_signal_struct(p->signal);
2529 bad_fork_cleanup_sighand:
2530 __cleanup_sighand(p->sighand);
2531 bad_fork_cleanup_fs:
2532 exit_fs(p); /* blocking */
2533 bad_fork_cleanup_files:
2534 exit_files(p); /* blocking */
2535 bad_fork_cleanup_semundo:
2536 exit_sem(p);
2537 bad_fork_cleanup_security:
2538 security_task_free(p);
2539 bad_fork_cleanup_audit:
2540 audit_free(p);
2541 bad_fork_cleanup_perf:
2542 perf_event_free_task(p);
2543 bad_fork_cleanup_policy:
2544 lockdep_free_task(p);
2545 #ifdef CONFIG_NUMA
2546 mpol_put(p->mempolicy);
2547 #endif
2548 bad_fork_cleanup_delayacct:
2549 delayacct_tsk_free(p);
2550 bad_fork_cleanup_count:
2551 dec_rlimit_ucounts(task_ucounts(p), UCOUNT_RLIMIT_NPROC, 1);
2552 exit_creds(p);
2553 bad_fork_free:
2554 WRITE_ONCE(p->__state, TASK_DEAD);
2555 exit_task_stack_account(p);
2556 put_task_stack(p);
2557 delayed_free_task(p);
2558 fork_out:
2559 spin_lock_irq(¤t->sighand->siglock);
2560 hlist_del_init(&delayed.node);
2561 spin_unlock_irq(¤t->sighand->siglock);
2562 return ERR_PTR(retval);
2563 }
2564
--
0-DAY CI Kernel Test Service
https://01.org/lkp
next prev parent reply other threads:[~2022-09-08 21:29 UTC|newest]
Thread overview: 19+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-09-08 14:03 [PATCH v3 0/2] Introduce CABA helper process tree Pavel Tikhomirov
2022-09-08 14:03 ` Pavel Tikhomirov
2022-09-08 14:03 ` [PATCH v3 1/2] Add CABA tree to task_struct Pavel Tikhomirov
2022-09-08 14:03 ` Pavel Tikhomirov
2022-09-08 21:29 ` kernel test robot [this message]
2022-09-08 21:29 ` kernel test robot
2022-09-08 22:15 ` Pavel Tikhomirov
2022-09-08 22:15 ` Pavel Tikhomirov
2022-09-08 22:15 ` Pavel Tikhomirov
2022-09-08 22:09 ` [PATCH v4 " Pavel Tikhomirov
2022-09-08 22:09 ` Pavel Tikhomirov
2022-09-08 23:51 ` [PATCH v3 " kernel test robot
2022-09-08 23:51 ` kernel test robot
2022-09-09 0:57 ` kernel test robot
2022-09-09 1:02 ` kernel test robot
2022-09-11 19:27 ` kernel test robot
2022-09-11 19:27 ` kernel test robot
2022-09-08 14:03 ` [PATCH v3 2/2] tests: Add CABA selftest Pavel Tikhomirov
2022-09-08 14:03 ` Pavel Tikhomirov
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=202209090529.EL54HX2U-lkp@intel.com \
--to=lkp@intel.com \
--cc=akpm@linux-foundation.org \
--cc=avagin@google.com \
--cc=brauner@kernel.org \
--cc=bristot@redhat.com \
--cc=bsegall@google.com \
--cc=dietmar.eggemann@arm.com \
--cc=ebiederm@xmission.com \
--cc=juri.lelli@redhat.com \
--cc=kbuild-all@lists.01.org \
--cc=keescook@chromium.org \
--cc=kernel@openvz.org \
--cc=linux-fsdevel@vger.kernel.org \
--cc=linux-ia64@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=mgorman@suse.de \
--cc=mingo@redhat.com \
--cc=peterz@infradead.org \
--cc=ptikhomirov@virtuozzo.com \
--cc=rostedt@goodmis.org \
--cc=vincent.guittot@linaro.org \
--cc=viro@zeniv.linux.org.uk \
--cc=vschneid@redhat.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.