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]
Date:	Tue, 3 Mar 2015 11:49:31 +0800
From:	chenfeng <puck.chen@...ilicon.com>
To:	"punit.agrawal" <punit.agrawal@....com>
CC:	<"catalin.marinas"@arm.com>, <will.deacon@....com>,
	<linux-arm-kernel@...ts.infradead.org>,
	<linux-kernel@...r.kernel.org>,
	"Peter Panshilin" <peter.panshilin@...ilicon.com>,
	Suzhuangluan <suzhuangluan@...ilicon.com>,
	Yiping Xu <xuyiping@...ilicon.com>,
	Dan zhao <dan.zhao@...ilicon.com>,
	qijiwen <qijiwen@...ilicon.com>,
	Wangbintian <bintian.wang@...wei.com>
Subject: Alignment issue with ldmia

There is an alignment issue with ldmia in A32 user-space with A64 
Kernel. Since the famous taobao apk use this instruction, so we want to 
emulate this to make it work well.

I make a simple test case to reproduce this issue.
-----------------------------------------------------------------------
#include <stdio.h>
#include <stdlib.h>

int main()
{
         char src_addr[1024];
         char dst_addr[1024];
         printf("--------%lx %lx\n",src_addr,dst_addr);
         unsigned long src_reg = (unsigned long)src_addr | 1;
         unsigned long dst_reg = (unsigned long)dst_addr | 1;
         printf("--------%lx %lx\n",src_reg,dst_reg);
         asm volatile("mov  r1, %0\n": : "r" (src_reg));
         asm volatile("mov  r2, %0\n": : "r" (dst_reg));
         asm volatile("ldmia r1!,{r2}");
         printf("--------------------------\n");

         return 0;
}
------------------------------------------------------------------------

I use the test case on A32 kernel with A32 user-space. It works 
well,becase of that is a do_alignment_ldmstm emulate in 
arch/arm/mm/alignment.c

So, I want to porting the code to arch/arm64.

The first step is getting the machine code of the unalignment 
instruction. However I have no idea how to do this.

There is a commit on google master L branch to emulate the undef 
instruction. I use these code for getting the instruction of unalignment
case. But I found the code in arch/arm/alignment.c get the instruction 
is 0xe8b10004 and the code in arch/arm64/kernel/traps.c is different.


Since I arm not professional for the code, I am writting for asking is 
there a way to get the thumb instruction when traps in kernel mode.








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