lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <m4nmhm2zmgrelxtyhftmg6kkyxexmznyo7khfmjxphkzr37ea6@44ga7yswli3c>
Date: Fri, 16 Jan 2026 14:46:44 -0500
From: "Liam R. Howlett" <Liam.Howlett@...cle.com>
To: kernel test robot <lkp@...el.com>
Cc: Andrew Morton <akpm@...ux-foundation.org>, oe-kbuild-all@...ts.linux.dev,
        Linux Memory Management List <linux-mm@...ck.org>,
        maple-tree@...ts.infradead.org, linux-kernel@...r.kernel.org,
        Suren Baghdasaryan <surenb@...gle.com>,
        Matthew Wilcox <willy@...radead.org>,
        Sidhartha Kumar <sidhartha.kumar@...cle.com>,
        Vlastimil Babka <vbabka@...e.cz>, Alice Ryhl <aliceryhl@...gle.com>,
        Kuninori Morimoto <kuninori.morimoto.gx@...esas.com>,
        Geert Uytterhoeven <geert@...ux-m68k.org>,
        Arnd Bergmann <arnd@...db.de>, Christian Kujau <lists@...dbynature.de>
Subject: Re: [PATCH 10/28] maple_tree: Introduce maple_copy node and use it
 in mas_spanning_rebalance()

* kernel test robot <lkp@...el.com> [260116 02:45]:
> Hi Liam,
> 
> kernel test robot noticed the following build warnings:
> 
> [auto build test WARNING on akpm-mm/mm-everything]
> [also build test WARNING on next-20260115]
> [cannot apply to akpm-mm/mm-nonmm-unstable soc/for-next linus/master v6.19-rc5]
> [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/Liam-R-Howlett/maple_tree-Move-mas_spanning_rebalance-loop-to-function/20260116-034135
> base:   https://git.kernel.org/pub/scm/linux/kernel/git/akpm/mm.git mm-everything
> patch link:    https://lore.kernel.org/r/20260115193647.1695937-11-Liam.Howlett%40oracle.com
> patch subject: [PATCH 10/28] maple_tree: Introduce maple_copy node and use it in mas_spanning_rebalance()
> config: x86_64-randconfig-121-20260116 (https://download.01.org/0day-ci/archive/20260116/202601161501.NZ3GNDCG-lkp@intel.com/config)
> compiler: gcc-13 (Debian 13.3.0-16) 13.3.0
> reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20260116/202601161501.NZ3GNDCG-lkp@intel.com/reproduce)
> 
> 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 <lkp@...el.com>
> | Closes: https://lore.kernel.org/oe-kbuild-all/202601161501.NZ3GNDCG-lkp@intel.com/
> 
> sparse warnings: (new ones prefixed by >>)
> >> lib/maple_tree.c:2621:29: sparse: sparse: incorrect type in assignment (different address spaces) @@     expected void [noderef] __rcu * @@     got void *content @@
>    lib/maple_tree.c:2621:29: sparse:     expected void [noderef] __rcu *
>    lib/maple_tree.c:2621:29: sparse:     got void *content
> >> lib/maple_tree.c:2624:23: sparse: sparse: incorrect type in assignment (different address spaces) @@     expected void [noderef] __rcu * @@     got void *entry @@
>    lib/maple_tree.c:2624:23: sparse:     expected void [noderef] __rcu *
>    lib/maple_tree.c:2624:23: sparse:     got void *entry
>    lib/maple_tree.c:2680:17: sparse: sparse: incorrect type in assignment (different address spaces) @@     expected void [noderef] __rcu **b_slots @@     got void [noderef] __rcu * @@
>    lib/maple_tree.c:2680:17: sparse:     expected void [noderef] __rcu **b_slots
>    lib/maple_tree.c:2680:17: sparse:     got void [noderef] __rcu *
>    lib/maple_tree.c:6412:30: sparse: sparse: incorrect type in assignment (different address spaces) @@     expected void [noderef] __rcu * @@     got struct maple_node * @@
>    lib/maple_tree.c:6412:30: sparse:     expected void [noderef] __rcu *
>    lib/maple_tree.c:6412:30: sparse:     got struct maple_node *
>    lib/maple_tree.c:6412:30: sparse: sparse: incorrect type in assignment (different address spaces) @@     expected void [noderef] __rcu * @@     got struct maple_node * @@
>    lib/maple_tree.c:6412:30: sparse:     expected void [noderef] __rcu *
>    lib/maple_tree.c:6412:30: sparse:     got struct maple_node *
> 
> vim +2621 lib/maple_tree.c
> 
>   2603	
>   2604	/*
>   2605	 * cp_leaf_init() - Initialize a maple_copy node for the leaf level of a
>   2606	 * spanning store
>   2607	 * @cp: The maple copy node
>   2608	 * @mas: The maple state
>   2609	 * @l_wr_mas: The left write state of the spanning store
>   2610	 * @r_wr_mas: The right write state of the spanning store
>   2611	 */
>   2612	static inline void cp_leaf_init(struct maple_copy *cp,
>   2613			struct ma_state *mas, struct ma_wr_state *l_wr_mas,
>   2614			struct ma_wr_state *r_wr_mas)
>   2615	{
>   2616		unsigned char end = 0;
>   2617	
>   2618		/* Create entries to insert including split entries to left and right */
>   2619		if (l_wr_mas->r_min < mas->index) {
>   2620			end++;
> > 2621			cp->slot[0] = l_wr_mas->content;
>   2622			cp->pivot[0] = mas->index - 1;
>   2623		}
> > 2624		cp->slot[end] = l_wr_mas->entry;
>   2625		cp->pivot[end] = mas->last;
>   2626	
>   2627		if (r_wr_mas->end_piv > mas->last) {
>   2628			end++;
>   2629			cp->slot[end] = r_wr_mas->slots[r_wr_mas->offset_end];
>   2630			cp->pivot[end] = r_wr_mas->end_piv;
>   2631		}
>   2632	
>   2633		cp->min = l_wr_mas->r_min;
>   2634		cp->max = cp->pivot[end];
>   2635		cp->end = end;
>   2636	}
>   2637	
> 

#syz test:   https://git.kernel.org/pub/scm/linux/kernel/git/akpm/mm.git mm-everything

--- a/lib/maple_tree.c
+++ b/lib/maple_tree.c
@@ -2092,19 +2092,28 @@ static inline void cp_leaf_init(struct maple_copy *cp,
 {
        unsigned char end = 0;
 
+       /*
+        * It is very important that the maple_copy node is never seen before a
+        * write side barrier happens.  Otherwise, there could be a reordering
+        * in the RCU code below that will be extremely difficult to debug.
+        *
+        * In this case, it is fine because the maple_copy is never exposed to
+        * readers until it is put into a final node and a wmb() occurs.
+        */
        cp->height = 1;
        /* Create entries to insert including split entries to left and right */
        if (l_wr_mas->r_min < mas->index) {
                end++;
-               cp->slot[0] = l_wr_mas->content;
+               RCU_INIT_POINTER(cp->slot[0], l_wr_mas->content);
                cp->pivot[0] = mas->index - 1;
        }
-       cp->slot[end] = l_wr_mas->entry;
+       RCU_INIT_POINTER(cp->slot[end], l_wr_mas->entry);
        cp->pivot[end] = mas->last;
 
        if (r_wr_mas->end_piv > mas->last) {
                end++;
-               cp->slot[end] = r_wr_mas->slots[r_wr_mas->offset_end];
+               RCU_INIT_POINTER(cp->slot[end],
+                                r_wr_mas->slots[r_wr_mas->offset_end]);
                cp->pivot[end] = r_wr_mas->end_piv;
        }

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ