Received: by 2002:a05:7412:3290:b0:fa:6e18:a558 with SMTP id ev16csp187446rdb; Thu, 25 Jan 2024 12:00:28 -0800 (PST) X-Google-Smtp-Source: AGHT+IHoJUM7dG8+D2jyPPsnPv59gVMf+Xxqi9dQG1TX3OM8sCTRS1zZceCL3pKp43FJ4U65l6qN X-Received: by 2002:a17:902:bc41:b0:1d7:91ae:6ddc with SMTP id t1-20020a170902bc4100b001d791ae6ddcmr238153plz.127.1706212827763; Thu, 25 Jan 2024 12:00:27 -0800 (PST) ARC-Seal: i=2; a=rsa-sha256; t=1706212827; cv=pass; d=google.com; s=arc-20160816; b=iPWUkXxhwWSmWOHIGZ/cy6hGV252vS5+UaBkGFGzqgNCnyllv+pDOumbgO4USB37Tq GRqJej5tAM5ZjKBvSeL5aDI+oOxSDx2ijYjgLL/SvsbtD1T2kM/6od/abU0ra1pn0tK2 VIbmHHQ6YvoHIeFYsOOC3JOxQwj9lSM7mePt/NVpnFPRZ3B/m0GxsTaifnctgjP3ocT7 r3vLxAQugO2jREBNPo5L3I/r/7TjDE39ShPgAgbKhCbV8YTFhoTrJnPzue3N+fbtD/Vt ir2XEwfJfV/Ss+RvXvnGds6o7ExfOAjPQABYrIObTjfrew1IgYpRw5vVxMg+9LhmgPNm ORWg== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=mime-version:list-unsubscribe:list-subscribe:list-id:precedence :user-agent:message-id:subject:cc:to:from:date:dkim-signature; bh=a9J/yrDP4CX+CTRHVc0s+P7nNxhLXEGaLVDWqs988UM=; fh=4/KMfYjBBHMaWf87yQr2c11CJYoYWGm60i00aGkEo6o=; b=mVJDzBB+lJ6HrNH/cyxfXgzuxO4gclnE5pHYuo2aIUA/ijRK9N3zb1xMexf/Gq4gR3 kxk+XTJqCJ0VpCLJnjYlFJEzfSvSVPuyMUKEkTY/OoE0N8IDIqooW4+AII7+SR/B5Fn6 0lKvVBvrLgMbtYjRJDPPKPB3NXpafd0LNwdp4GbFKrVm6peR1+BmZHAeqgwQPJeavVBa r90l4NMb20bDrkU5G0r/bPZGhthyjFqazWf8w0nzFdxKVh0v5ufEXPYIgxfQjg0EXzVj Hloy9mngpfzzgmoPSRGF9ioD8uZZ0G3nebSiuY7kRHwK/r542HMjX1cMpjg1uxiWL6+J EOEQ== ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@inria.fr header.s=dc header.b=LAaKtxuI; arc=pass (i=1 spf=pass spfdomain=inria.fr dkim=pass dkdomain=inria.fr dmarc=pass fromdomain=inria.fr); spf=pass (google.com: domain of linux-kernel+bounces-39219-linux.lists.archive=gmail.com@vger.kernel.org designates 2604:1380:45e3:2400::1 as permitted sender) smtp.mailfrom="linux-kernel+bounces-39219-linux.lists.archive=gmail.com@vger.kernel.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=inria.fr Return-Path: Received: from sv.mirrors.kernel.org (sv.mirrors.kernel.org. [2604:1380:45e3:2400::1]) by mx.google.com with ESMTPS id w7-20020a170902e88700b001d7043abf5csi2258495plg.418.2024.01.25.12.00.27 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 25 Jan 2024 12:00:27 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel+bounces-39219-linux.lists.archive=gmail.com@vger.kernel.org designates 2604:1380:45e3:2400::1 as permitted sender) client-ip=2604:1380:45e3:2400::1; Authentication-Results: mx.google.com; dkim=pass header.i=@inria.fr header.s=dc header.b=LAaKtxuI; arc=pass (i=1 spf=pass spfdomain=inria.fr dkim=pass dkdomain=inria.fr dmarc=pass fromdomain=inria.fr); spf=pass (google.com: domain of linux-kernel+bounces-39219-linux.lists.archive=gmail.com@vger.kernel.org designates 2604:1380:45e3:2400::1 as permitted sender) smtp.mailfrom="linux-kernel+bounces-39219-linux.lists.archive=gmail.com@vger.kernel.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=inria.fr Received: from smtp.subspace.kernel.org (wormhole.subspace.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by sv.mirrors.kernel.org (Postfix) with ESMTPS id 5D2982931A3 for ; Thu, 25 Jan 2024 20:00:27 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id DFA30137C42; Thu, 25 Jan 2024 20:00:10 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=inria.fr header.i=@inria.fr header.b="LAaKtxuI" Received: from mail2-relais-roc.national.inria.fr (mail2-relais-roc.national.inria.fr [192.134.164.83]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id D95C7136666 for ; Thu, 25 Jan 2024 20:00:05 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=192.134.164.83 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1706212809; cv=none; b=jhvjrbKiCVHON1dfonEwGtd0dvR/jSv4mBXNFxkPj4i0Zsc8PPVlL09lW8Cia4iN8XyWhZtzFT0FME1t7QdjChSXdkH3n+PWhNS3YSObBm4NRZULfpTePEhe1YqGL1xj1G9D1peIDsyxZe2Z4hZWREDJGwNoJhFOOAf4bTaU+OQ= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1706212809; c=relaxed/simple; bh=jZqqf66o5UsIlpPJOTDIWc0dEexi4t+3VzVeQrbsKIo=; h=Date:From:To:cc:Subject:Message-ID:MIME-Version:Content-Type; b=VCEKKBwkRPoQVr8gDa8O6hBnGmBWcQp/7jWaNRuLeQ+ocJzmfkvzT9ngQj2TjPFCKQTq9AVmm3/al66CjJi0bTxtdJaBubzGAVboKdkFpWrpvBllT/JhFxWeeZtmzV3eGNZ28Kpf8ckJqNueyEmiNa9vcXs/lsPNpSOh5eqqKL4= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=inria.fr; spf=pass smtp.mailfrom=inria.fr; dkim=pass (1024-bit key) header.d=inria.fr header.i=@inria.fr header.b=LAaKtxuI; arc=none smtp.client-ip=192.134.164.83 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=inria.fr Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=inria.fr DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=inria.fr; s=dc; h=date:from:to:cc:subject:message-id:mime-version; bh=a9J/yrDP4CX+CTRHVc0s+P7nNxhLXEGaLVDWqs988UM=; b=LAaKtxuIA7mCGoKo13JRZ8hQTOxd63xipQcJdwS/Q6b5u3aB9khpUtUl RS8WxJvLce1WcepE0E08mqj43JEv7j7AgKyzsIUopnEnXC+fm5CZvme5e 6H4anfpZjP3vErrIz5akrGkgupthVAemfJpizDmT67/Bk63bLmO/fRKDO A=; Authentication-Results: mail2-relais-roc.national.inria.fr; dkim=none (message not signed) header.i=none; spf=SoftFail smtp.mailfrom=julia.lawall@inria.fr; dmarc=fail (p=none dis=none) d=inria.fr X-IronPort-AV: E=Sophos;i="6.05,216,1701126000"; d="scan'208";a="148687757" Received: from 231.85.89.92.rev.sfr.net (HELO hadrien) ([92.89.85.231]) by mail2-relais-roc.national.inria.fr with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 25 Jan 2024 21:00:04 +0100 Date: Thu, 25 Jan 2024 21:00:03 +0100 (CET) From: Julia Lawall X-X-Sender: jll@hadrien To: Chenyuan Mi cc: Mike Marshall , Xiyu Yang , Xin Tan , linux-kernel@vger.kernel.org, oe-kbuild-all@lists.linux.dev Subject: fs/orangefs/super.c:583:18-25: ERROR: ORANGEFS_SB ( sb ) is NULL but dereferenced. (fwd) Message-ID: User-Agent: Alpine 2.22 (DEB 394 2020-01-19) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset=US-ASCII Please check lines 527-529 and the goto, where it looks like tere is a null pointer dereference. julia ---------- Forwarded message ---------- Date: Fri, 26 Jan 2024 03:13:12 +0800 From: kernel test robot To: oe-kbuild@lists.linux.dev Cc: lkp@intel.com, Julia Lawall Subject: fs/orangefs/super.c:583:18-25: ERROR: ORANGEFS_SB ( sb ) is NULL but dereferenced. BCC: lkp@intel.com CC: oe-kbuild-all@lists.linux.dev CC: linux-kernel@vger.kernel.org TO: Chenyuan Mi CC: Mike Marshall CC: Xiyu Yang CC: Xin Tan tree: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git master head: 6098d87eaf31f48153c984e2adadf14762520a87 commit: ac2c63757f4f413980d6c676dbe1ae2941b94afa orangefs: Fix sb refcount leak when allocate sb info failed. date: 2 years, 3 months ago :::::: branch date: 18 hours ago :::::: commit date: 2 years, 3 months ago config: arm-randconfig-r062-20240117 (https://download.01.org/0day-ci/archive/20240126/202401260328.WPmVVmk3-lkp@intel.com/config) compiler: clang version 18.0.0git (https://github.com/llvm/llvm-project 9bde5becb44ea071f5e1fa1f5d4071dc8788b18c) If you fix the issue in a separate patch/commit (i.e. not just a new version of the same patch/commit), kindly add following tags | Reported-by: kernel test robot | Reported-by: Julia Lawall | Closes: https://lore.kernel.org/r/202401260328.WPmVVmk3-lkp@intel.com/ cocci warnings: (new ones prefixed by >>) >> fs/orangefs/super.c:583:18-25: ERROR: ORANGEFS_SB ( sb ) is NULL but dereferenced. vim +583 fs/orangefs/super.c 1182fca3bc0044 Mike Marshall 2015-07-17 472 8bb8aefd5afb54 Yi Liu 2015-11-24 473 struct dentry *orangefs_mount(struct file_system_type *fst, 1182fca3bc0044 Mike Marshall 2015-07-17 474 int flags, 1182fca3bc0044 Mike Marshall 2015-07-17 475 const char *devname, 1182fca3bc0044 Mike Marshall 2015-07-17 476 void *data) 1182fca3bc0044 Mike Marshall 2015-07-17 477 { 507874c08f633e Colin Ian King 2021-09-10 478 int ret; 1182fca3bc0044 Mike Marshall 2015-07-17 479 struct super_block *sb = ERR_PTR(-EINVAL); 8bb8aefd5afb54 Yi Liu 2015-11-24 480 struct orangefs_kernel_op_s *new_op; 1be21f865aa5a9 Mike Marshall 2015-09-29 481 struct dentry *d = ERR_PTR(-EINVAL); 1182fca3bc0044 Mike Marshall 2015-07-17 482 1182fca3bc0044 Mike Marshall 2015-07-17 483 gossip_debug(GOSSIP_SUPER_DEBUG, 8bb8aefd5afb54 Yi Liu 2015-11-24 484 "orangefs_mount: called with devname %s\n", 1182fca3bc0044 Mike Marshall 2015-07-17 485 devname); 1182fca3bc0044 Mike Marshall 2015-07-17 486 1182fca3bc0044 Mike Marshall 2015-07-17 487 if (!devname) { 1182fca3bc0044 Mike Marshall 2015-07-17 488 gossip_err("ERROR: device name not specified.\n"); 1182fca3bc0044 Mike Marshall 2015-07-17 489 return ERR_PTR(-EINVAL); 1182fca3bc0044 Mike Marshall 2015-07-17 490 } 1182fca3bc0044 Mike Marshall 2015-07-17 491 8bb8aefd5afb54 Yi Liu 2015-11-24 492 new_op = op_alloc(ORANGEFS_VFS_OP_FS_MOUNT); 1182fca3bc0044 Mike Marshall 2015-07-17 493 if (!new_op) 1182fca3bc0044 Mike Marshall 2015-07-17 494 return ERR_PTR(-ENOMEM); 1182fca3bc0044 Mike Marshall 2015-07-17 495 8bb8aefd5afb54 Yi Liu 2015-11-24 496 strncpy(new_op->upcall.req.fs_mount.orangefs_config_server, 1182fca3bc0044 Mike Marshall 2015-07-17 497 devname, 6bdfb48dae8e1b Xiongfeng Wang 2018-01-08 498 ORANGEFS_MAX_SERVER_ADDR_LEN - 1); 1182fca3bc0044 Mike Marshall 2015-07-17 499 1182fca3bc0044 Mike Marshall 2015-07-17 500 gossip_debug(GOSSIP_SUPER_DEBUG, 8bb8aefd5afb54 Yi Liu 2015-11-24 501 "Attempting ORANGEFS Mount via host %s\n", 8bb8aefd5afb54 Yi Liu 2015-11-24 502 new_op->upcall.req.fs_mount.orangefs_config_server); 1182fca3bc0044 Mike Marshall 2015-07-17 503 8bb8aefd5afb54 Yi Liu 2015-11-24 504 ret = service_operation(new_op, "orangefs_mount", 0); 1182fca3bc0044 Mike Marshall 2015-07-17 505 gossip_debug(GOSSIP_SUPER_DEBUG, 8bb8aefd5afb54 Yi Liu 2015-11-24 506 "orangefs_mount: mount got return value of %d\n", ret); 1182fca3bc0044 Mike Marshall 2015-07-17 507 if (ret) 1182fca3bc0044 Mike Marshall 2015-07-17 508 goto free_op; 1182fca3bc0044 Mike Marshall 2015-07-17 509 8bb8aefd5afb54 Yi Liu 2015-11-24 510 if (new_op->downcall.resp.fs_mount.fs_id == ORANGEFS_FS_ID_NULL) { 1182fca3bc0044 Mike Marshall 2015-07-17 511 gossip_err("ERROR: Retrieved null fs_id\n"); 1182fca3bc0044 Mike Marshall 2015-07-17 512 ret = -EINVAL; 1182fca3bc0044 Mike Marshall 2015-07-17 513 goto free_op; 1182fca3bc0044 Mike Marshall 2015-07-17 514 } 1182fca3bc0044 Mike Marshall 2015-07-17 515 1be21f865aa5a9 Mike Marshall 2015-09-29 516 sb = sget(fst, NULL, set_anon_super, flags, NULL); 1be21f865aa5a9 Mike Marshall 2015-09-29 517 1be21f865aa5a9 Mike Marshall 2015-09-29 518 if (IS_ERR(sb)) { 1be21f865aa5a9 Mike Marshall 2015-09-29 519 d = ERR_CAST(sb); 9d286b0d8207a7 Martin Brandenburg 2017-04-25 520 orangefs_unmount(new_op->downcall.resp.fs_mount.id, 9d286b0d8207a7 Martin Brandenburg 2017-04-25 521 new_op->downcall.resp.fs_mount.fs_id, devname); 1182fca3bc0044 Mike Marshall 2015-07-17 522 goto free_op; 1182fca3bc0044 Mike Marshall 2015-07-17 523 } 1182fca3bc0044 Mike Marshall 2015-07-17 524 f2d34c738cbf21 Martin Brandenburg 2018-02-12 525 /* alloc and init our private orangefs sb info */ f2d34c738cbf21 Martin Brandenburg 2018-02-12 526 sb->s_fs_info = kzalloc(sizeof(struct orangefs_sb_info_s), GFP_KERNEL); f2d34c738cbf21 Martin Brandenburg 2018-02-12 527 if (!ORANGEFS_SB(sb)) { f2d34c738cbf21 Martin Brandenburg 2018-02-12 528 d = ERR_PTR(-ENOMEM); ac2c63757f4f41 Chenyuan Mi 2021-09-07 529 goto free_sb_and_op; f2d34c738cbf21 Martin Brandenburg 2018-02-12 530 } f2d34c738cbf21 Martin Brandenburg 2018-02-12 531 8bb8aefd5afb54 Yi Liu 2015-11-24 532 ret = orangefs_fill_sb(sb, 5c0dbbc64b25fd Al Viro 2015-10-08 533 &new_op->downcall.resp.fs_mount, data, 1751e8a6cb935e Linus Torvalds 2017-11-27 534 flags & SB_SILENT ? 1 : 0); 1be21f865aa5a9 Mike Marshall 2015-09-29 535 1be21f865aa5a9 Mike Marshall 2015-09-29 536 if (ret) { 1be21f865aa5a9 Mike Marshall 2015-09-29 537 d = ERR_PTR(ret); 1ec1688c5360e1 Martin Brandenburg 2017-04-14 538 goto free_sb_and_op; 1be21f865aa5a9 Mike Marshall 2015-09-29 539 } 1182fca3bc0044 Mike Marshall 2015-07-17 540 1182fca3bc0044 Mike Marshall 2015-07-17 541 /* 1182fca3bc0044 Mike Marshall 2015-07-17 542 * on successful mount, store the devname and data 1182fca3bc0044 Mike Marshall 2015-07-17 543 * used 1182fca3bc0044 Mike Marshall 2015-07-17 544 */ 8bb8aefd5afb54 Yi Liu 2015-11-24 545 strncpy(ORANGEFS_SB(sb)->devname, 1182fca3bc0044 Mike Marshall 2015-07-17 546 devname, 6bdfb48dae8e1b Xiongfeng Wang 2018-01-08 547 ORANGEFS_MAX_SERVER_ADDR_LEN - 1); 1182fca3bc0044 Mike Marshall 2015-07-17 548 1182fca3bc0044 Mike Marshall 2015-07-17 549 /* mount_pending must be cleared */ 8bb8aefd5afb54 Yi Liu 2015-11-24 550 ORANGEFS_SB(sb)->mount_pending = 0; 1182fca3bc0044 Mike Marshall 2015-07-17 551 1182fca3bc0044 Mike Marshall 2015-07-17 552 /* 8bb8aefd5afb54 Yi Liu 2015-11-24 553 * finally, add this sb to our list of known orangefs 1182fca3bc0044 Mike Marshall 2015-07-17 554 * sb's 1182fca3bc0044 Mike Marshall 2015-07-17 555 */ 45996492e5c85a Al Viro 2016-03-25 556 gossip_debug(GOSSIP_SUPER_DEBUG, 45996492e5c85a Al Viro 2016-03-25 557 "Adding SB %p to orangefs superblocks\n", 45996492e5c85a Al Viro 2016-03-25 558 ORANGEFS_SB(sb)); 45996492e5c85a Al Viro 2016-03-25 559 spin_lock(&orangefs_superblocks_lock); 45996492e5c85a Al Viro 2016-03-25 560 list_add_tail(&ORANGEFS_SB(sb)->list, &orangefs_superblocks); 45996492e5c85a Al Viro 2016-03-25 561 spin_unlock(&orangefs_superblocks_lock); 1182fca3bc0044 Mike Marshall 2015-07-17 562 op_release(new_op); 482664ddba81b3 Martin Brandenburg 2016-08-12 563 1ec1688c5360e1 Martin Brandenburg 2017-04-14 564 /* Must be removed from the list now. */ 1ec1688c5360e1 Martin Brandenburg 2017-04-14 565 ORANGEFS_SB(sb)->no_list = 0; 1ec1688c5360e1 Martin Brandenburg 2017-04-14 566 f60fbdbf41c802 Mike Marshall 2016-10-03 567 if (orangefs_userspace_version >= 20906) { 482664ddba81b3 Martin Brandenburg 2016-08-12 568 new_op = op_alloc(ORANGEFS_VFS_OP_FEATURES); 482664ddba81b3 Martin Brandenburg 2016-08-12 569 if (!new_op) 482664ddba81b3 Martin Brandenburg 2016-08-12 570 return ERR_PTR(-ENOMEM); 482664ddba81b3 Martin Brandenburg 2016-08-12 571 new_op->upcall.req.features.features = 0; 482664ddba81b3 Martin Brandenburg 2016-08-12 572 ret = service_operation(new_op, "orangefs_features", 0); 482664ddba81b3 Martin Brandenburg 2016-08-12 573 orangefs_features = new_op->downcall.resp.features.features; 482664ddba81b3 Martin Brandenburg 2016-08-12 574 op_release(new_op); 482664ddba81b3 Martin Brandenburg 2016-08-12 575 } else { 482664ddba81b3 Martin Brandenburg 2016-08-12 576 orangefs_features = 0; 482664ddba81b3 Martin Brandenburg 2016-08-12 577 } 482664ddba81b3 Martin Brandenburg 2016-08-12 578 1be21f865aa5a9 Mike Marshall 2015-09-29 579 return dget(sb->s_root); 1182fca3bc0044 Mike Marshall 2015-07-17 580 1ec1688c5360e1 Martin Brandenburg 2017-04-14 581 free_sb_and_op: 1ec1688c5360e1 Martin Brandenburg 2017-04-14 582 /* Will call orangefs_kill_sb with sb not in list. */ 1ec1688c5360e1 Martin Brandenburg 2017-04-14 @583 ORANGEFS_SB(sb)->no_list = 1; 9d286b0d8207a7 Martin Brandenburg 2017-04-25 584 /* ORANGEFS_VFS_OP_FS_UMOUNT is done by orangefs_kill_sb. */ 1ec1688c5360e1 Martin Brandenburg 2017-04-14 585 deactivate_locked_super(sb); 1182fca3bc0044 Mike Marshall 2015-07-17 586 free_op: 8bb8aefd5afb54 Yi Liu 2015-11-24 587 gossip_err("orangefs_mount: mount request failed with %d\n", ret); 1182fca3bc0044 Mike Marshall 2015-07-17 588 if (ret == -EINVAL) { 8bb8aefd5afb54 Yi Liu 2015-11-24 589 gossip_err("Ensure that all orangefs-servers have the same FS configuration files\n"); 1182fca3bc0044 Mike Marshall 2015-07-17 590 gossip_err("Look at pvfs2-client-core log file (typically /tmp/pvfs2-client.log) for more details\n"); 1182fca3bc0044 Mike Marshall 2015-07-17 591 } 1182fca3bc0044 Mike Marshall 2015-07-17 592 1182fca3bc0044 Mike Marshall 2015-07-17 593 op_release(new_op); 1182fca3bc0044 Mike Marshall 2015-07-17 594 1be21f865aa5a9 Mike Marshall 2015-09-29 595 return d; 1182fca3bc0044 Mike Marshall 2015-07-17 596 } 1182fca3bc0044 Mike Marshall 2015-07-17 597 :::::: The code at line 583 was first introduced by commit :::::: 1ec1688c5360e14dde4094d6acbf7516bf6db37e orangefs: free superblock when mount fails :::::: TO: Martin Brandenburg :::::: CC: Linus Torvalds -- 0-DAY CI Kernel Test Service https://github.com/intel/lkp-tests/wiki