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-next>] [day] [month] [year] [list]
Message-ID: <20100318044930.GC5045@nowhere>
Date:	Thu, 18 Mar 2010 05:49:33 +0100
From:	Frederic Weisbecker <fweisbec@...il.com>
To:	Sparc <sparclinux@...r.kernel.org>, Tejun Heo <tj@...nel.org>,
	David Miller <davem@...emloft.net>,
	LKML <linux-kernel@...r.kernel.org>
Subject: [BUG] percpu misaligned allocation

Hi,

While using the lock events through perf in a sparc box, I can see
the following message repeated many times:

	Kernel unaligned access at TPC[49357c] perf_trace_lock_acquire+0xb4/0x180

It actually hangs the box as the messages are sent to a serial console.

When used with perf, the trace events use a per cpu buffer allocated
in kernel/trace/trace_event_perf.c, and the allocation appears to return
a misaligned percpu pointer. It is aligned to 4 while it seems it
requires to be aligned to 8.

The cpu offsets themselves are well aligned, below is a home made dump of
the per_cpu_offset(cpu) as they are attributed in arch/sparc/kernel/smp_64.c
in setup_per_cpu_areas():

[    0.000000] cpu: 0 offset: fffff8001121e000
[    0.000000] cpu: 1 offset: fffff8001141e000
[    0.000000] cpu: 2 offset: fffff8001161e000
[    0.000000] cpu: 3 offset: fffff8001181e000
[    0.000000] cpu: 4 offset: fffff80011a1e000
[etc..]


But perf_trace_buf (which is the per cpu pointer) has the address
0000000000bae074, returned by alloc_percpu().
Adding this to the per_cpu_offset(cpu) gives the misaligned
address and sparc complains when it is dereferenced.

To reproduce, you can just go the tools/perf directory, build
it and launch:

	./perf record -a -f -e lock:* sleep 1

I've attached the config.

Thanks.

View attachment "config-sparc" of type "text/plain" (38810 bytes)

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ