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: <4A0C563A.3020100@kernel.org>
Date:	Thu, 14 May 2009 10:34:50 -0700
From:	Yinghai Lu <yinghai@...nel.org>
To:	Andrew Morton <akpm@...ux-foundation.org>
CC:	mel@....ul.ie, mingo@...e.hu, tglx@...utronix.de, hpa@...or.com,
	cl@...ux-foundation.org, suresh.b.siddha@...el.com,
	linux-kernel@...r.kernel.org, viro@...iv.linux.org.uk,
	rusty@...tcorp.com.au, steiner@....com, rientjes@...gle.com
Subject: Re: [PATCH 5/5] mm: clear N_HIGH_MEMORY map before se set it again
 -v2

Andrew Morton wrote:
> On Thu, 14 May 2009 10:05:43 -0700
> Yinghai Lu <yinghai@...nel.org> wrote:
> 
>> Andrew Morton wrote:
>>> On Thu, 14 May 2009 09:43:22 -0700
>>> Yinghai Lu <yinghai@...nel.org> wrote:
>>>
>>>> incase some system strange SRAT table. some kind of small range.
>>>> or with mem= etc
>>>>
>>> That description is very hard to understand.  Please provide more details.
>> if the wrong SRAT table, have small range for some node. that node will not be onlined.
>> In the early checking, the bit in node_states[N_HIGH_MEMORY] for the node is set even 
>> that node has less RAM like 1M, and it is not cleared before the bit is set again in 
>> the following loop according online nodes.
> 
> Where in the kernel does this setting of the bit in node_states[]
> occur?  early_calculate_totalpages()?

yes.

> 
> Where in the kernel is it later decided to _not_ use these pages in
> that node?  Perhaps that's the place where the problem should be fixed.

in free_area_init_nodes()

        /* Initialise every node */
        mminit_verify_pageflags_layout();
        setup_nr_node_ids();
        for_each_online_node(nid) {
                pg_data_t *pgdat = NODE_DATA(nid);
                free_area_init_node(nid, NULL,
                                find_min_pfn_for_node(nid), NULL);

                /* Any memory on that node */
                if (pgdat->node_present_pages)
                        node_set_state(nid, N_HIGH_MEMORY);
                check_for_regular_memory(pgdat);
        }

so that patch clear that node_mask before set those bits according if that node is online
and node_present_pages is there.

> 
> 
>>>> Signed-off-by: Yinghai Lu <Yinghai@...nel.org>
>>>> Tested-by: Jack Steiner <steiner@....com>
>>> What reason did Jack have to test this?  Perhaps he hit some bug? 
>>> If so, please fully describe that bug in the changelog.
>> for some memmoryless node and strange memmap.
> 
> That's not a very good problem description.
> 
> Put yourself in the position of a distro engineer whose customer
> reports a 2.6.26 problem.  He's going to look at your patch wondering
> whether it might fix his customer's problem.  We should provide him
> with sufficient information to be able to determine this.
> 
>>>
>>>> Index: linux-2.6/mm/page_alloc.c
>>>> ===================================================================
>>>> --- linux-2.6.orig/mm/page_alloc.c
>>>> +++ linux-2.6/mm/page_alloc.c
>>>> @@ -4041,6 +4047,11 @@ void __init free_area_init_nodes(unsigne
>>>>  						early_node_map[i].start_pfn,
>>>>  						early_node_map[i].end_pfn);
>>>>  
>>>> +	/*
>>>> +	 * find_zone_movable_pfns_for_nodes/early_calculate_totalpages init
>>>> +	 * that node_mask, clear it at first
>>>> +	 */
>>>> +	nodes_clear(node_states[N_HIGH_MEMORY]);
>>>>  	/* Initialise every node */
>>>>  	mminit_verify_pageflags_layout();
>>>>  	setup_nr_node_ids();
>>> If CONFIG_HIGHMEM=n, this will clear the N_NORMAL_MEMORY entry in
>>> node_states[].  Why is this correct and desirable?
>> then N_NORMAL_MEMORY == N_HIGH_MEMORY
> 
> I know.
> 
> But it's unobvious that this change is correct and desirable with both
> CONFIG_HIGHMEM=n and CONFIG_HIGHMEM=y.

use ifdef ?

YH
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ