From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752792AbcBPEoo (ORCPT ); Mon, 15 Feb 2016 23:44:44 -0500 Received: from mailout1.samsung.com ([203.254.224.24]:54892 "EHLO mailout1.samsung.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752400AbcBPEom (ORCPT ); Mon, 15 Feb 2016 23:44:42 -0500 X-AuditID: cbfee691-f79766d0000012b6-71-56c2a937358d Date: Tue, 16 Feb 2016 04:44:39 +0000 (GMT) From: EunTaik Lee Subject: [PATCH v2] arm64: add alignment fault hanling To: Catalin Marinas Cc: "will.deacon@arm.com" , "vladimir.murzin@arm.com" , "suzuki.poulose@arm.com" , "riandrews@android.com" , "james.morse@arm.com" , "salyzyn@android.com" , "Dave.Martin@arm.com" , "linux-arm-kernel@lists.infradead.org" , "linux-kernel@vger.kernel.org" , EunTaik Lee Reply-to: eun.taik.lee@samsung.com MIME-version: 1.0 X-MTR: 20160216044024660@eun.taik.lee Msgkey: 20160216044024660@eun.taik.lee X-EPLocale: ko_KR.euc-kr X-Priority: 3 X-EPWebmail-Msg-Type: personal X-EPWebmail-Reply-Demand: 0 X-EPApproval-Locale: X-EPHeader: ML X-MLAttribute: X-RootMTR: 20160215104222079@eun.taik.lee X-ParentMTR: 20160215114751821@eun.taik.lee X-ArchiveUser: EV X-CPGSPASS: Y X-ConfirmMail: N,general Content-type: text/plain; charset=euc-kr MIME-version: 1.0 Message-id: <329817481.954581455597874663.JavaMail.weblogic@epmlwas08c> X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFprFJsWRmVeSWpSXmKPExsVy+t8zLV3zlYfCDG6vF7a4vGsOmwOjx+dN cgGMUQ2MNolFyRmZZakKqXnJ+SmZeem2SqEhbroWSgoZ+cUltkrRRgbGekamJnpGJuZ6lgax VkamSgp5ibmptkoVulC9SgpFyQVAtbmVxUADclL1oOJ6xal5KQ5Z+aUgl+gVJ+YWl+al6yXn 5yoplCXmlAKNUNJPmMqYMX1CG3vBNvGKp3f/sTUwPhHrYuTkEBJQlzixew0LiC0hYCKxcNs5 ZghbTOLCvfVsXYxcQDXLGCU+dzUzwRRtOT2NCSIxh1Fi2rIHYN0sAqoSl860sYLYbAK6Ev8/ drF3MXJwCAuYSaxoqQIxRQT0JRb+zgBpZRaYySKxYdZyNogjlCTmH24AG8MrIChxcuYTqINU JXr+LWSHiKtJnO9tZIWIS0jMmn4ByuaVmNH+FKpeTmLa1zVQD0hLnJ+1gRHmmcXfH0PF+SWO 3d4B9YuAxNQzBxlBbpMQ0JJ48TMfIqwj8fB9E1SJoMTpa93MMKsaNv5mhzlha8sTsBOYBRQl pnQ/ZIewtSS+/NjHhu4VXgF3ieWfNoHDU0JgJofElm2zWCcwKs1CUjcLyaxZSGYhq1nAyLKK UTS1ILmgOCm9yBQ5tjcxQhLhxB2M9w9YH2IU4GBU4uHd4HooTIg1say4MvcQYzIwliYyS4km 5wPTbV5JvKGxmZGFqYmpsZG5pRmGsImphYWJEQ5hJXFeHemfwUIC6YklqdmpqQWpRfFFpTmp xYcYmTg4pRoY+Yo5H35/v/lg54sc5pnXss9opOuccct3W/59guMF2T4rq5BfO2ZWvHpzY3Zz XGX65XsCe3yOHZv6p7NU6ekBQ8el4XtPzr+TsT/968qiH59K/v3M2r7s68VlWZc+WoqtOfSU ff3DH4d26T4Lq5a9NDt9b/PUmLAXkw8wuxYoK5eHlLgU/P4pkafEUpyRaKjFXFScCAB+JvoS rQMAAA== X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFjrOKsWRmVeSWpSXmKPExsVy+t/tXl3zlYfCDM5/4Le4vGsOmwOjx+dN cgGMURk2GamJKalFCql5yfkpmXnptkrewfHO8aZmBoa6hpYW5koKeYm5qbZKLj4Bum6ZOUBD lRTKEnNKgUIBicXFSvp2NkX5pSWpChn5xSW2StFGBsZ6RqYmekbGBnomBrFWhgYGRqZAVQkZ GdMntLEXbBOveHr3H1sD4xOxLkZODiEBdYkTu9ewgNgSAiYSW05PY4KwxSQu3FvP1sXIBVQz h1Fi2rIHYEUsAqoSl860sYLYbAK6Ev8/drF3MXJwCAuYSaxoqQIxRQT0JRb+zgBpZRaYySKx YdZyNohdShLzDzeAjeEVEJQ4OfMJ1F5ViZ5/C9kh4moS53sbWSHiEhKzpl+AsnklZrQ/haqX k5j2dQ0zhC0tcX7WBkaYmxd/fwwV55c4dnsH1C8CElPPHGQEuU1CQEvixc98iLCOxMP3TVAl ghKnr3Uzw6xq2PibHeaErS1PwE5gFlCUmNL9kB3C1pL48mMfG7pXeAXcJZZ/2sQ2gVF2FpLU LCTts5C0I6tZwMiyilE0tSC5oDgpvcJYrzgxt7g0L10vOT93EyM4ET1bvIPx/3nrQ4wCHIxK PLwbXA+FCbEmlhVX5h5ilOBgVhLhTVgEFOJNSaysSi3Kjy8qzUktPsRoCoyzicxSosn5wCSZ VxJvaGxgbGhoaW5gamhkoSTOG/B3XZiQQHpiSWp2ampBahFMHxMHp1QDo7+JId/dq20Xl/Bv Nuua5HDhxHXnvJ2KrJPbU2oXHzISNFzJq24iPGHBtbrZx+6FBSwI61ku3nXt6b0bVy7P/lfZ 4WKV+3Ud2+a0zq9PIh9KSCv+sGaVUDJSfXFq8lWrnYt6uLl3vH4kyt68bHrzvGzXi07Cz6bv 53m+86pr6n8+hrfH1KX//1JiKc5INNRiLipOBAA3ErD5WgMAAA== DLP-Filter: Pass X-CFilter-Loop: Reflected Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Transfer-Encoding: 8bit X-MIME-Autoconverted: from base64 to 8bit by mail.home.local id u1G4jOnm020460 Userspace memory is mapped as below: F2A7F000--F2A7FFFF Normal Memory F2A80000--F2A80FFF Device nGnRnE And that userspace application makes a system call as below: -009 |do_strncpy_from_user(inline) -009 |strncpy_from_user() -010 |getname_flags() -011 |user_path_at_empty() -012 |user_path_at() -013 |SYSC_faccessat(inline) -013 |sys_faccessat() -014 |__sys_trace(asm) --> |exception The string spans from 0xF2A7FFC1 to 0xF2A7FFFB. When do_strncpy_from_user() reads the last (unsigned long) value, the alignement fault is triggered. The 8 byte from 0xF2A7FFC1 spans to the next page that is mapped as Device nGnRnE, which does not allow an unaligned access, causes the abort. The instruction which caused the alignment fault is registered in the fixup table but the exception handler does not reach there. This patch registers a alignment fault handler and fixes up the pc if appropriate. Signed-off-by: Eun Taik Lee --- changes in v2 : call do_bad_area() instead of calling fix_up_exception directly. arch/arm64/mm/fault.c | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/arch/arm64/mm/fault.c b/arch/arm64/mm/fault.c index 19211c4..a5ebb99 100644 --- a/arch/arm64/mm/fault.c +++ b/arch/arm64/mm/fault.c @@ -371,6 +371,14 @@ static int __kprobes do_translation_fault(unsigned long addr, return 0; } +static int __kprobes do_alignment_fault(unsigned long addr, + unsigned int esr, + struct pt_regs *regs) +{ + do_bad_area(addr, esr, regs); + return 0; +} + /* * This abort handler always returns "fault". */ @@ -418,7 +426,7 @@ static struct fault_info { { do_bad, SIGBUS, 0, "synchronous parity error (translation table walk" }, { do_bad, SIGBUS, 0, "synchronous parity error (translation table walk" }, { do_bad, SIGBUS, 0, "unknown 32" }, - { do_bad, SIGBUS, BUS_ADRALN, "alignment fault" }, + { do_alignment_fault, SIGBUS, BUS_ADRALN, "alignment fault" }, { do_bad, SIGBUS, 0, "debug event" }, { do_bad, SIGBUS, 0, "unknown 35" }, { do_bad, SIGBUS, 0, "unknown 36" }, -- 1.9.1