* [arm64:fixes/core 4/5] arch/arm64/kernel/armv8_deprecated.c:404:31: warning: passing argument 1 of '__range_ok' makes pointer from integer without a cast
@ 2018-02-17 4:38 kbuild test robot
2018-02-17 8:40 ` Catalin Marinas
0 siblings, 1 reply; 2+ messages in thread
From: kbuild test robot @ 2018-02-17 4:38 UTC (permalink / raw)
To: linux-arm-kernel
tree: https://git.kernel.org/pub/scm/linux/kernel/git/arm64/linux.git fixes/core
head: 8d77124b84783bc37517edc6223d501092ab8e53
commit: 6e3941e8f8e106e25343f140b9d73a2bc64730a7 [4/5] arm64: uaccess: Clean up types for access_ok()
config: arm64-allmodconfig (attached as .config)
compiler: aarch64-linux-gnu-gcc (Debian 7.2.0-11) 7.2.0
reproduce:
wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
chmod +x ~/bin/make.cross
git checkout 6e3941e8f8e106e25343f140b9d73a2bc64730a7
# save the attached .config to linux build tree
make.cross ARCH=arm64
All warnings (new ones prefixed by >>):
In file included from include/linux/uaccess.h:14:0,
from arch/arm64/kernel/armv8_deprecated.c:23:
arch/arm64/kernel/armv8_deprecated.c: In function 'swp_handler':
>> arch/arm64/kernel/armv8_deprecated.c:404:31: warning: passing argument 1 of '__range_ok' makes pointer from integer without a cast [-Wint-conversion]
if (!access_ok(VERIFY_WRITE, (address & ~3), 4)) {
^
arch/arm64/include/asm/uaccess.h:107:48: note: in definition of macro 'access_ok'
#define access_ok(type, addr, size) __range_ok(addr, size)
^~~~
arch/arm64/include/asm/uaccess.h:75:29: note: expected 'const void *' but argument is of type 'u32 {aka unsigned int}'
static inline unsigned long __range_ok(const void __user *addr, unsigned long size)
^~~~~~~~~~
vim +/__range_ok +404 arch/arm64/kernel/armv8_deprecated.c
2af3ec08b David A. Long 2016-07-08 364
bd35a4adc Punit Agrawal 2014-11-18 365 /*
bd35a4adc Punit Agrawal 2014-11-18 366 * swp_handler logs the id of calling process, dissects the instruction, sanity
bd35a4adc Punit Agrawal 2014-11-18 367 * checks the memory location, calls emulate_swpX for the actual operation and
bd35a4adc Punit Agrawal 2014-11-18 368 * deals with fixup/error handling before returning
bd35a4adc Punit Agrawal 2014-11-18 369 */
bd35a4adc Punit Agrawal 2014-11-18 370 static int swp_handler(struct pt_regs *regs, u32 instr)
bd35a4adc Punit Agrawal 2014-11-18 371 {
bd35a4adc Punit Agrawal 2014-11-18 372 u32 destreg, data, type, address = 0;
bd35a4adc Punit Agrawal 2014-11-18 373 int rn, rt2, res = 0;
bd35a4adc Punit Agrawal 2014-11-18 374
bd35a4adc Punit Agrawal 2014-11-18 375 perf_sw_event(PERF_COUNT_SW_EMULATION_FAULTS, 1, regs, regs->pc);
bd35a4adc Punit Agrawal 2014-11-18 376
bd35a4adc Punit Agrawal 2014-11-18 377 type = instr & TYPE_SWPB;
bd35a4adc Punit Agrawal 2014-11-18 378
2af3ec08b David A. Long 2016-07-08 379 switch (aarch32_check_condition(instr, regs->pstate)) {
bd35a4adc Punit Agrawal 2014-11-18 380 case ARM_OPCODE_CONDTEST_PASS:
bd35a4adc Punit Agrawal 2014-11-18 381 break;
bd35a4adc Punit Agrawal 2014-11-18 382 case ARM_OPCODE_CONDTEST_FAIL:
bd35a4adc Punit Agrawal 2014-11-18 383 /* Condition failed - return to next instruction */
bd35a4adc Punit Agrawal 2014-11-18 384 goto ret;
bd35a4adc Punit Agrawal 2014-11-18 385 case ARM_OPCODE_CONDTEST_UNCOND:
bd35a4adc Punit Agrawal 2014-11-18 386 /* If unconditional encoding - not a SWP, undef */
bd35a4adc Punit Agrawal 2014-11-18 387 return -EFAULT;
bd35a4adc Punit Agrawal 2014-11-18 388 default:
bd35a4adc Punit Agrawal 2014-11-18 389 return -EINVAL;
bd35a4adc Punit Agrawal 2014-11-18 390 }
bd35a4adc Punit Agrawal 2014-11-18 391
bd35a4adc Punit Agrawal 2014-11-18 392 rn = aarch32_insn_extract_reg_num(instr, A32_RN_OFFSET);
bd35a4adc Punit Agrawal 2014-11-18 393 rt2 = aarch32_insn_extract_reg_num(instr, A32_RT2_OFFSET);
bd35a4adc Punit Agrawal 2014-11-18 394
bd35a4adc Punit Agrawal 2014-11-18 395 address = (u32)regs->user_regs.regs[rn];
bd35a4adc Punit Agrawal 2014-11-18 396 data = (u32)regs->user_regs.regs[rt2];
bd35a4adc Punit Agrawal 2014-11-18 397 destreg = aarch32_insn_extract_reg_num(instr, A32_RT_OFFSET);
bd35a4adc Punit Agrawal 2014-11-18 398
bd35a4adc Punit Agrawal 2014-11-18 399 pr_debug("addr in r%d->0x%08x, dest is r%d, source in r%d->0x%08x)\n",
bd35a4adc Punit Agrawal 2014-11-18 400 rn, address, destreg,
bd35a4adc Punit Agrawal 2014-11-18 401 aarch32_insn_extract_reg_num(instr, A32_RT2_OFFSET), data);
bd35a4adc Punit Agrawal 2014-11-18 402
bd35a4adc Punit Agrawal 2014-11-18 403 /* Check access in reasonable access range for both SWP and SWPB */
bd35a4adc Punit Agrawal 2014-11-18 @404 if (!access_ok(VERIFY_WRITE, (address & ~3), 4)) {
bd35a4adc Punit Agrawal 2014-11-18 405 pr_debug("SWP{B} emulation: access to 0x%08x not allowed!\n",
bd35a4adc Punit Agrawal 2014-11-18 406 address);
bd35a4adc Punit Agrawal 2014-11-18 407 goto fault;
bd35a4adc Punit Agrawal 2014-11-18 408 }
bd35a4adc Punit Agrawal 2014-11-18 409
bd35a4adc Punit Agrawal 2014-11-18 410 res = emulate_swpX(address, &data, type);
bd35a4adc Punit Agrawal 2014-11-18 411 if (res == -EFAULT)
bd35a4adc Punit Agrawal 2014-11-18 412 goto fault;
bd35a4adc Punit Agrawal 2014-11-18 413 else if (res == 0)
bd35a4adc Punit Agrawal 2014-11-18 414 regs->user_regs.regs[destreg] = data;
bd35a4adc Punit Agrawal 2014-11-18 415
bd35a4adc Punit Agrawal 2014-11-18 416 ret:
d784e2988 Punit Agrawal 2014-11-18 417 if (type == TYPE_SWPB)
d784e2988 Punit Agrawal 2014-11-18 418 trace_instruction_emulation("swpb", regs->pc);
d784e2988 Punit Agrawal 2014-11-18 419 else
d784e2988 Punit Agrawal 2014-11-18 420 trace_instruction_emulation("swp", regs->pc);
d784e2988 Punit Agrawal 2014-11-18 421
bd35a4adc Punit Agrawal 2014-11-18 422 pr_warn_ratelimited("\"%s\" (%ld) uses obsolete SWP{B} instruction at 0x%llx\n",
bd35a4adc Punit Agrawal 2014-11-18 423 current->comm, (unsigned long)current->pid, regs->pc);
bd35a4adc Punit Agrawal 2014-11-18 424
6436beeee Julien Thierry 2017-10-25 425 arm64_skip_faulting_instruction(regs, 4);
bd35a4adc Punit Agrawal 2014-11-18 426 return 0;
bd35a4adc Punit Agrawal 2014-11-18 427
bd35a4adc Punit Agrawal 2014-11-18 428 fault:
390bf1773 Andre Przywara 2016-06-28 429 pr_debug("SWP{B} emulation: access caused memory abort!\n");
390bf1773 Andre Przywara 2016-06-28 430 arm64_notify_segfault(regs, address);
bd35a4adc Punit Agrawal 2014-11-18 431
bd35a4adc Punit Agrawal 2014-11-18 432 return 0;
bd35a4adc Punit Agrawal 2014-11-18 433 }
bd35a4adc Punit Agrawal 2014-11-18 434
:::::: The code at line 404 was first introduced by commit
:::::: bd35a4adc4131c530ec7d90242555eac7b3dbe3f arm64: Port SWP/SWPB emulation support from arm
:::::: TO: Punit Agrawal <punit.agrawal@arm.com>
:::::: CC: Will Deacon <will.deacon@arm.com>
---
0-DAY kernel test infrastructure Open Source Technology Center
https://lists.01.org/pipermail/kbuild-all Intel Corporation
-------------- next part --------------
A non-text attachment was scrubbed...
Name: .config.gz
Type: application/gzip
Size: 59119 bytes
Desc: not available
URL: <http://lists.infradead.org/pipermail/linux-arm-kernel/attachments/20180217/cd55dd8c/attachment-0001.gz>
^ permalink raw reply [flat|nested] 2+ messages in thread
* [arm64:fixes/core 4/5] arch/arm64/kernel/armv8_deprecated.c:404:31: warning: passing argument 1 of '__range_ok' makes pointer from integer without a cast
2018-02-17 4:38 [arm64:fixes/core 4/5] arch/arm64/kernel/armv8_deprecated.c:404:31: warning: passing argument 1 of '__range_ok' makes pointer from integer without a cast kbuild test robot
@ 2018-02-17 8:40 ` Catalin Marinas
0 siblings, 0 replies; 2+ messages in thread
From: Catalin Marinas @ 2018-02-17 8:40 UTC (permalink / raw)
To: linux-arm-kernel
On Sat, Feb 17, 2018 at 12:38:16PM +0800, kbuild test robot wrote:
> tree: https://git.kernel.org/pub/scm/linux/kernel/git/arm64/linux.git fixes/core
> head: 8d77124b84783bc37517edc6223d501092ab8e53
> commit: 6e3941e8f8e106e25343f140b9d73a2bc64730a7 [4/5] arm64: uaccess: Clean up types for access_ok()
> config: arm64-allmodconfig (attached as .config)
> compiler: aarch64-linux-gnu-gcc (Debian 7.2.0-11) 7.2.0
> reproduce:
> wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
> chmod +x ~/bin/make.cross
> git checkout 6e3941e8f8e106e25343f140b9d73a2bc64730a7
> # save the attached .config to linux build tree
> make.cross ARCH=arm64
>
> All warnings (new ones prefixed by >>):
>
> In file included from include/linux/uaccess.h:14:0,
> from arch/arm64/kernel/armv8_deprecated.c:23:
> arch/arm64/kernel/armv8_deprecated.c: In function 'swp_handler':
> >> arch/arm64/kernel/armv8_deprecated.c:404:31: warning: passing argument 1 of '__range_ok' makes pointer from integer without a cast [-Wint-conversion]
> if (!access_ok(VERIFY_WRITE, (address & ~3), 4)) {
> ^
> arch/arm64/include/asm/uaccess.h:107:48: note: in definition of macro 'access_ok'
> #define access_ok(type, addr, size) __range_ok(addr, size)
> ^~~~
> arch/arm64/include/asm/uaccess.h:75:29: note: expected 'const void *' but argument is of type 'u32 {aka unsigned int}'
> static inline unsigned long __range_ok(const void __user *addr, unsigned long size)
> ^~~~~~~~~~
Thanks for the report. It's an easy fix but I'm dropping this patch for
now and wait for Robin to update. I'll re-send this patch after -rc2.
--
Catalin
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2018-02-17 8:40 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2018-02-17 4:38 [arm64:fixes/core 4/5] arch/arm64/kernel/armv8_deprecated.c:404:31: warning: passing argument 1 of '__range_ok' makes pointer from integer without a cast kbuild test robot
2018-02-17 8:40 ` Catalin Marinas
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.