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: <1233934150.20597.26.camel@zakaz.uk.xensource.com>
Date:	Fri, 06 Feb 2009 15:29:10 +0000
From:	Ian Campbell <ijc@...lion.org.uk>
To:	Jeremy Fitzhardinge <jeremy@...p.org>
Cc:	Ingo Molnar <mingo@...e.hu>, linux-kernel@...r.kernel.org,
	the arch/x86 maintainers <x86@...nel.org>
Subject: Re: [PATCH 35 of 36] x86: make pgd/pud/pmd/pte_none consistent

On Thu, 2009-02-05 at 11:31 -0800, Jeremy Fitzhardinge wrote:
> The _none test is done differently for every level of the pagetable.
> Standardize them by:
> 
>  1: Use the native_X_val to extract the raw entry, with no need to go
>     via paravirt_ops, diff -r 1d0646d0d319 arch/x86/include/asm/pgtable.h, and
>  2: Compare with 0 rather than using a boolean !, since they are actually values
>     and not booleans.

In a 32 bit Xen guest this one causes

        [    8.354898] 1 multicall(s) failed: cpu 1
        [    8.354921] Pid: 2213, comm: bootclean Not tainted 2.6.29-rc3-x86_32p-xenU-tip #135
        [    8.354937] Call Trace:
        [    8.354955]  [<c01036e3>] xen_mc_flush+0x133/0x1b0
        [    8.354971]  [<c0105d2a>] ? xen_force_evtchn_callback+0x1a/0x30
        [    8.354988]  [<c0105a60>] xen_flush_tlb_others+0xb0/0xd0
        [    8.355003]  [<c0126643>] flush_tlb_page+0x53/0xa0
        [    8.355018]  [<c0176a80>] do_wp_page+0x2a0/0x7c0
        [    8.355034]  [<c0238f0a>] ? notify_remote_via_irq+0x3a/0x70
        [    8.355049]  [<c0178950>] handle_mm_fault+0x7b0/0xa50
        [    8.355065]  [<c0131a3e>] ? wake_up_new_task+0x8e/0xb0
        [    8.355079]  [<c01337b5>] ? do_fork+0xe5/0x320
        [    8.355095]  [<c0121919>] do_page_fault+0xe9/0x240
        [    8.355109]  [<c0121830>] ? do_page_fault+0x0/0x240
        [    8.355125]  [<c032457a>] error_code+0x72/0x78
        [    8.355139]   call  1/1: op=2863311530 arg=[aaaaaaaa] result=-38	xen_flush_tlb_others+0x41/0xd0
        [    8.355161] ------------[ cut here ]------------
        [    8.355172] kernel BUG at /local/scratch/ianc/devel/kernels/paravirt/arch/x86/xen/multicalls.c:182!
        [    8.355189] invalid opcode: 0000 [#1] SMP 
        [    8.355207] last sysfs file: /sys/class/net/lo/operstate
        [    8.355218] Modules linked in:
        [    8.355230] 
        [    8.355239] Pid: 2213, comm: bootclean Not tainted (2.6.29-rc3-x86_32p-xenU-tip #135) 
        [    8.355254] EIP: 0061:[<c010374b>] EFLAGS: 00010002 CPU: 1
        [    8.355267] EIP is at xen_mc_flush+0x19b/0x1b0
        [    8.355278] EAX: 00000000 EBX: 00000000 ECX: c10cc060 EDX: 00000000
        [    8.355290] ESI: 00000000 EDI: 00000001 EBP: c4c61e70 ESP: c4c61e40
        [    8.355302]  DS: 007b ES: 007b FS: 00d8 GS: 0033 SS: 0069
        [    8.355314] Process bootclean (pid: 2213, ti=c4c60000 task=c5ad3460 task.ti=c4c60000)
        [    8.355328] Stack:
        [    8.355336]  c0367d84 00000001 00000001 aaaaaaaa aaaaaaaa ffffffda c01059f1 c10cc060
        [    8.355372]  c10c0060 c4c7a6d4 bfabf790 bfabf790 c4c61e80 c0105a60 c4c7a6d4 c4c7a580
        [    8.355413]  c4c61ea0 c0126643 00000000 80000000 00000025 08428067 80000000 c4c
        
Didn't figure out why yet.

> 
> Signed-off-by: Jeremy Fitzhardinge <jeremy.fitzhardinge@...rix.com>
> 
> ---
>  arch/x86/include/asm/pgtable.h |    6 +++---
>  1 file changed, 3 insertions(+), 3 deletions(-)
> 
> diff --git a/arch/x86/include/asm/pgtable.h b/arch/x86/include/asm/pgtable.h
> --- a/arch/x86/include/asm/pgtable.h
> +++ b/arch/x86/include/asm/pgtable.h
> @@ -503,7 +503,7 @@
>  {
>  	/* Only check low word on 32-bit platforms, since it might be
>  	   out of sync with upper half. */
> -	return !(unsigned long)native_pmd_val(pmd);
> +	return (unsigned long)native_pmd_val(pmd) == 0;
>  }
>  
>  static inline unsigned long pmd_page_vaddr(pmd_t pmd)
> @@ -568,7 +568,7 @@
>  #if PAGETABLE_LEVELS > 2
>  static inline int pud_none(pud_t pud)
>  {
> -	return pud_val(pud) == 0;
> +	return native_pud_val(pud) == 0;
>  }
>  
>  static inline int pud_present(pud_t pud)
> @@ -643,7 +643,7 @@
>  
>  static inline int pgd_none(pgd_t pgd)
>  {
> -	return !pgd_val(pgd);
> +	return !native_pgd_val(pgd);
>  }
>  #endif	/* PAGETABLE_LEVELS > 3 */
>  
> 
> 
> --
> 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/
> 
-- 
Ian Campbell

I can resist anything but temptation.

--
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