Messages in this thread | | | Subject | Re: READ_ONCE() + STACKPROTECTOR_STRONG == :/ (was Re: [GIT PULL] Please pull powerpc/linux.git powerpc-5.5-2 tag (topic/kasan-bitops)) | From | Christian Borntraeger <> | Date | Thu, 12 Dec 2019 19:29:18 +0100 |
| |
On 12.12.19 19:06, Will Deacon wrote: > On Thu, Dec 12, 2019 at 09:41:32AM -0800, Linus Torvalds wrote: >> On Thu, Dec 12, 2019 at 2:46 AM Peter Zijlstra <peterz@infradead.org> wrote: >>> >>> +#ifdef GCC_VERSION < 40800 >> >> Where does that 4.8 version check come from, and why? >> >> Yeah, I know, but this really wants a comment. Sadly it looks like gcc >> bugzilla is down, so >> >> https://gcc.gnu.org/bugzilla/show_bug.cgi?id=58145 >> >> currently gives an "Internal Server Error" for me. >> >> [ Delete the horrid code we have because of gcc bugs ] >> >>> +#else /* GCC_VERSION < 40800 */ >>> + >>> +#define READ_ONCE_NOCHECK(x) \ >>> +({ \ >>> + typeof(x) __x = *(volatile typeof(x))&(x); \ >> >> I think we can/should just do this unconditionally if it helps th eissue. > > I'm currently trying to solve the issue by removing volatile from the bitop > function signatures, but it's grotty because there are quite a few callers > to fix up. I'm still trying to do it, because removing volatile fields from > structurs is generally a "good thing", but I'd be keen to simplify > READ_ONCE() as you suggest regardless.
As I am the one who added the foundation of READ_ONCEs uglyness, I am now in favour of re-simplifying it again. I was first a bit scared about re-introducing bugs, but the gcc testsuite has this particular case covered, so hopefully we should not see the issue with volatile and aggregate types again.
Christian
| |