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
| ||
|
Date: Wed, 29 Mar 2017 18:55:54 +0200 From: Oleg Nesterov <oleg@...hat.com> To: Linus Torvalds <torvalds@...ux-foundation.org> Cc: Andrew Morton <akpm@...ux-foundation.org>, Andy Lutomirski <luto@...nel.org>, Denys Vlasenko <dvlasenk@...hat.com>, "H. Peter Anvin" <hpa@...or.com>, Ingo Molnar <mingo@...hat.com>, Jan Kratochvil <jan.kratochvil@...hat.com>, Pedro Alves <palves@...hat.com>, Thomas Gleixner <tglx@...utronix.de>, the arch/x86 maintainers <x86@...nel.org>, Linux Kernel Mailing List <linux-kernel@...r.kernel.org> Subject: Re: syscall_get_error() && TS_ checks On 03/29, Linus Torvalds wrote: > > On Wed, Mar 29, 2017 at 9:33 AM, Oleg Nesterov <oleg@...hat.com> wrote: > > > > Firstly, why do we need the IS_ERR_VALUE() check? This is only used by > > do_signal/handle_signal, we do not care if it returns non-zero as long > > as the value can't be confused with -ERESTART.* codes. > > There are system calls that can return "negative" values that aren't errors. > > Notably mmap() can return a valid pointer with the high bit set. > > So syscall_get_error() should return 0 for not just positive return > values, but for those kinds of negative non-error values. Once again, it is only used in arch/x86/kernel/signal.c by do_signal() and handle_signal(). We do not care if mmap() returns a valid pointer with the high bit set, regs-ax can't be confused with -ERESTART code. > > And why do we need the TS_ checks? > > Those may be bogus. > > > So why we can't simply change putreg32() to always sign-extend regs->ax > > regs->orig_ax and just do > > > > static inline long syscall_get_error(struct task_struct *task, > > struct pt_regs *regs) > > { > > return regs-ax; > > } > > That would be *complete* garbage. Lots of system calls return positive > values that sure as hell aren't errors. See above. And please note that I actually suggest to kill this helper and just use syscall_get_return_value() in arch/x86/kernel/signal.c. Oleg.
Powered by blists - more mailing lists