On Thu, Mar 5, 2020 at 9:26 AM Kees Cook <keescook@xxxxxxxxxxxx> wrote: > > On Thu, Mar 05, 2020 at 11:07:56AM +0300, Dan Carpenter wrote: > > On Wed, Mar 04, 2020 at 10:13:40AM -0800, Kees Cook wrote: > > > On Tue, Mar 03, 2020 at 12:38:32PM +0300, Dan Carpenter wrote: > > > > The real fix is to initialize everything manually, the automated > > > > initialization is a hardenning feature which many people will disable. > > > > > > I cannot disagree more with this sentiment. Linus has specifically said he > > > wants this initialization on by default[1], > > > > Fine, but as long as it's a configurable thing then we need to manually > > initialize as well or it's still a CVE etc. It will take a while before > > we drop support for old versions of GCC as well. > > Yes, I agree; that's totally true. We need to continue to fix all the > uninitialized flaws we encounter unless this is on by default for all > supported compiler versions (which will be a looong time). (But it's > not relevant to this patch because copy_from_user() does already do > the initialization.) > > This set of patches was about dealing with the pathological cases of > auto-init colliding with functions that do, in fact, fully init. Though > I must say, I remain concerned about inventing such markings for fear > they'll be used in places where the "trust me, it's fully initialized" > state does not actually hold[1] but the author thinks it does. > > -Kees Right now I'm trying to make Clang understand that output arguments of inline assembly initialize the memory. Then it would be possible to write something like: struct binder_transaction_data tr; asm("": "=m"(tr)); if (copy_from_user(&tr, ptr, sizeof(tr))) ... , and the asm directive can be hidden into copy_from_user(). _______________________________________________ devel mailing list devel@xxxxxxxxxxxxxxxxxxxxxx http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel