sh: Support for multiple nodes.
Subsystems (2)
Hello Paul Mundt,
The patch b241cb0c885e: "sh: Support for multiple nodes." from Jun 6, 2007, leads to the following static checker warning:
arch/sh/mm/numa.c:47 setup_bootmem_node() error: buffer overflow 'node_data' 1024 <= 1024
arch/sh/mm/numa.c
27 void __init setup_bootmem_node(int nid, unsigned long start, unsigned long end)
28 {
29 unsigned long bootmap_pages;
30 unsigned long start_pfn, end_pfn;
31 unsigned long bootmem_paddr;
32
33 /* Don't allow bogus node assignment */
34 BUG_ON(nid > MAX_NUMNODES || nid <= 0);
^^^^^^^^^^^^^^^^^^It's not very important but this check is off by one so static checkers complain.
35
36 start_pfn = start >> PAGE_SHIFT;
37 end_pfn = end >> PAGE_SHIFT;
38
39 pmb_bolt_mapping((unsigned long)__va(start), start, end - start,
40 PAGE_KERNEL);
41
42 memblock_add(start, end - start);
43
44 __add_active_range(nid, start_pfn, end_pfn);
45
46 /* Node-local pgdat */
47 NODE_DATA(nid) = __va(memblock_alloc_base(sizeof(struct pglist_data),
48 SMP_CACHE_BYTES, end));
49 memset(NODE_DATA(nid), 0, sizeof(struct pglist_data));
50 regards,
dan carpenter
Hi Dan,
Quoted 17 lines · Dan Carpenter
The patch
b241cb0c885e: "sh: Support for multiple nodes." from Jun 6, 2007, leads to the following static checker warning:arch/sh/mm/numa.c:47 setup_bootmem_node() error: buffer overflow 'node_data' 1024 <= 1024
arch/sh/mm/numa.c27 void __init setup_bootmem_node(int nid, unsigned long start, unsigned long end) 28 { 29 unsigned long bootmap_pages; 30 unsigned long start_pfn, end_pfn; 31 unsigned long bootmem_paddr; 32 33 /* Don't allow bogus node assignment */ 34 BUG_ON(nid > MAX_NUMNODES || nid <= 0); ^^^^^^^^^^^^^^^^^^
Quoted 2 lines
It's not very important but this check is off by one so static checkers complain.
Thanks for your analysis!
Please note that sh is orphaned. Andrew Morton does accept patches.
Quoted 8 lines
35
36 start_pfn = start >> PAGE_SHIFT;
37 end_pfn = end >> PAGE_SHIFT;
38
39 pmb_bolt_mapping((unsigned long)__va(start), start, end - start,
40 PAGE_KERNEL);
41
42 memblock_add(start, end - start);Quoted 8 lines
43
44 __add_active_range(nid, start_pfn, end_pfn);
45
46 /* Node-local pgdat */
47 NODE_DATA(nid) = __va(memblock_alloc_base(sizeof(struct pglist_data),
48 SMP_CACHE_BYTES, end));
49 memset(NODE_DATA(nid), 0, sizeof(struct pglist_data));
50Gr{oetje,eeting}s,
Geert
--
Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- [email protected]
In personal conversations with technical people, I call myself a hacker. But when I'm talking to journalists I just say "programmer" or something like that.
-- Linus Torvalds
PATCH 1/1 sh: off by one BUG_ON() in setup_bootmem_node()
This off by one bug is harmless but it upsets the static checkers and the code is obvious so it doesn't hurt to fix it. The Smatch warning is:
arch/sh/mm/numa.c:47 setup_bootmem_node() error: buffer overflow 'node_data' 1024 <= 1024
arch/sh/mm/numa.c +1 -1
@@ -31,7 +31,7 @@ void __init setup_bootmem_node(int nid, unsigned long start, unsigned long end)unsigned long bootmem_paddr;/* Don't allow bogus node assignment */ -BUG_ON (nid >MAX_NUMNODES || nid <=0 ); +BUG_ON (nid >=MAX_NUMNODES || nid <=0 ); start_pfn = start >>PAGE_SHIFT ; end_pfn = end >>PAGE_SHIFT ;
Re: [patch] sh: off by one BUG_ON() in setup_bootmem_node()
Quoted 8 lines · Dan Carpenter
This off by one bug is harmless but it upsets the static checkers and the code is obvious so it doesn't hurt to fix it. The Smatch warning is:
arch/sh/mm/numa.c:47 setup_bootmem_node() error: buffer overflow 'node_data' 1024 <= 1024Signed-off-by Dan Carpenter <[email protected]>
arch/sh/mm/numa.c void __init setup_bootmem_node(int nid, unsigned long start, unsigned long end) · line 37
Quoted 13 lines
arch/sh/mm/numa.c +1
-1@@ -31,7 +31,7 @@ void __init setup_bootmem_node(int nid, unsigned long start, unsigned long end)unsigned long bootmem_paddr;/* Don't allow bogus node assignment */ -BUG_ON (nid >MAX_NUMNODES || nid <=0 ); +BUG_ON (nid >=MAX_NUMNODES || nid <=0 ); start_pfn = start >>PAGE_SHIFT ; end_pfn = end >>PAGE_SHIFT ;
Gr{oetje,eeting}s,
Geert
--
Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- [email protected]
In personal conversations with technical people, I call myself a hacker. But when I'm talking to journalists I just say "programmer" or something like that.
-- Linus Torvalds