Re: [PATCH] ARC: uaccess: get_user to zero out dest in cause of fault
From: "H. Peter Anvin" <hpa@zytor.com>
Date: 2016-08-22 23:19:33
Also in:
lkml
On August 22, 2016 3:23:06 PM PDT, Linus Torvalds [off-list ref] wrote:
On Sun, Aug 21, 2016 at 10:52 AM, Linus Torvalds [off-list ref] wrote:quoted
On Sat, Aug 20, 2016 at 11:42 PM, Al Viro [off-list ref]wrote:quoted
quoted
It's not exactly setjmp/longjmp; what I had in mind was along thelines ofquoted
That ends up having all the exact same issues as setjmp, andgenerallyquoted
you *do* want the compiler to know about it.So just in case you wanted to play around with it, here's a kernel implementation of 'setjmp/longjmp' for x86. It's very lightly tested (and I'll admit to editing it for some cleanups after that light testing), but it does look largely sane. The whole interface choice may be debatable: maybe it would be better to allocate the register buffer on the stack, and just hide a pointer to it in the task struct. Things like that could be changed fairly easily. But if you want to play around with this, this patch should get you started. Of course, you'd want to wrap things up somehow, and I would *not* want to see naked setjmp() calls in the kernel. And we'd need this for all other architectures too, but it's usually not hard to do. It needs to save all the callee-saved registers and the stack pointer and return address. That should generally be it. The 32-bit version has not been tested at all, but it compiled at some point, and the code looks mostly sane. The 64-bit code I actually had a stupid non-user-access test-case for. Linus
The nice thing about using __builtin_ is that I believe gcc is aware of which registers need saving, and also know that the common path doesn't clobber registers at all. -- Sent from my Android device with K-9 Mail. Please excuse brevity and formatting.