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: Fri, 11 Dec 2015 21:19:17 +0000 From: "Luck, Tony" <tony.luck@...el.com> To: Andy Lutomirski <luto@...capital.net> CC: Ingo Molnar <mingo@...nel.org>, Borislav Petkov <bp@...en8.de>, "Andrew Morton" <akpm@...ux-foundation.org>, Andy Lutomirski <luto@...nel.org>, "Williams, Dan J" <dan.j.williams@...el.com>, "linux-kernel@...r.kernel.org" <linux-kernel@...r.kernel.org>, "linux-mm@...ck.org" <linux-mm@...ck.org>, linux-nvdimm <linux-nvdimm@...1.01.org>, X86 ML <x86@...nel.org> Subject: RE: [PATCHV2 3/3] x86, ras: Add mcsafe_memcpy() function to recover from machine checks > I still don't get the BIT(63) thing. Can you explain it? It will be more obvious when I get around to writing copy_from_user(). Then we will have a function that can take page faults if there are pages that are not present. If the page faults can't be fixed we have a -EFAULT condition. We can also take machine checks if we reads from a location with an uncorrected error. We need to distinguish these two cases because the action we take is different. For the unresolved page fault we already have the ABI that the copy_to/from_user() functions return zero for success, and a non-zero return is the number of not-copied bytes. So for my new case I'm setting bit63 ... this is never going to be set for a failed page fault. copy_from_user() conceptually will look like this: int copy_from_user(void *to, void *from, unsigned long n) { u64 ret = mcsafe_memcpy(to, from, n); if (COPY_HAD_MCHECK(r)) { if (memory_failure(COPY_MCHECK_PADDR(ret) >> PAGE_SIZE, ...)) force_sig(SIGBUS, current); return something; } else return ret; } -Tony
Powered by blists - more mailing lists