From mboxrd@z Thu Jan 1 00:00:00 1970 From: Alexey Kodanev Date: Tue, 15 Mar 2016 14:29:56 +0300 Subject: [LTP] [PATCH] device-drivers/uaccess: add a workaround for Intel's SMAP feature In-Reply-To: <56E7EF8C.3010702@oracle.com> References: <1458033917-13891-1-git-send-email-wangxg.fnst@cn.fujitsu.com> <56E7D636.9040804@cn.fujitsu.com> <56E7EF8C.3010702@oracle.com> Message-ID: <56E7F234.60709@oracle.com> List-Id: MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: ltp@lists.linux.it On 03/15/2016 02:18 PM, Alexey Kodanev wrote: > Hi, > On 03/15/2016 12:30 PM, Xiaoguang Wang wrote: >> hello, >> >> Sorry, I do not have a machine with this SMAP feature, anybody can >> help to test this patch, thanks very much. >> >> Regards, >> Xiaoguang Wang >> >> On 03/15/2016 05:25 PM, Xiaoguang Wang wrote: >>> When Intel's new "Supervisor Mode Access Prevention" (SMAP) feature is >>> enabled, kernel will be forbidden to visit user space memory, please >>> see url: https://lwn.net/Articles/517475/ for detailed infomation. >>> >>> Here, we explicitly call stac()/clac() to enable/disable SMAP feature. >>> >>> Signed-off-by: Xiaoguang Wang >>> --- >>> testcases/kernel/device-drivers/uaccess/ltp_uaccess.c | 8 ++++++++ >>> 1 file changed, 8 insertions(+) >>> >>> diff --git a/testcases/kernel/device-drivers/uaccess/ltp_uaccess.c >>> b/testcases/kernel/device-drivers/uaccess/ltp_uaccess.c >>> index a9a06e9..35a9aa0 100644 >>> --- a/testcases/kernel/device-drivers/uaccess/ltp_uaccess.c >>> +++ b/testcases/kernel/device-drivers/uaccess/ltp_uaccess.c >>> @@ -68,6 +68,9 @@ static ssize_t sys_tcase(struct device *dev, >>> str = (char *) ptr; >>> test_result = 0; >>> +#ifdef CONFIG_X86_SMAP >>> + stac(); >>> +#endif Also you don't need ifdefs as smap.h has a check: ... #else /* CONFIG_X86_SMAP */ static inline void clac(void) { } static inline void stac(void) { } ... >>> >>> switch (tc) { >>> case TC_READ_USER: >>> if (copy_from_user(buffer, str, str_size)) >>> @@ -90,6 +93,11 @@ static ssize_t sys_tcase(struct device *dev, >>> break; >>> } >>> +#ifdef CONFIG_X86_SMAP >>> + clac(); >>> +#endif > > > copy_from_user() and others have stac() / clac() already. Are you sure we > need to invoke them there again? > > Thanks, > Alexey > >