From mboxrd@z Thu Jan 1 00:00:00 1970 Date: Wed, 17 Jan 2018 08:46:41 -0600 (CST) From: Christopher Lameter In-Reply-To: <20180116210313.GA7791@bombadil.infradead.org> Message-ID: References: <1515531365-37423-1-git-send-email-keescook@chromium.org> <1515531365-37423-5-git-send-email-keescook@chromium.org> <20180114230719.GB32027@bombadil.infradead.org> <20180116160525.GF30073@bombadil.infradead.org> <20180116174315.GA10461@bombadil.infradead.org> <20180116210313.GA7791@bombadil.infradead.org> MIME-Version: 1.0 Content-Type: text/plain; charset=US-ASCII Subject: [kernel-hardening] Re: kmem_cache_attr (was Re: [PATCH 04/36] usercopy: Prepare for usercopy whitelisting) To: Matthew Wilcox Cc: Kees Cook , linux-kernel@vger.kernel.org, David Windsor , Pekka Enberg , David Rientjes , Joonsoo Kim , Andrew Morton , linux-mm@kvack.org, linux-xfs@vger.kernel.org, Linus Torvalds , Alexander Viro , Andy Lutomirski , Christoph Hellwig , "David S. Miller" , Laura Abbott , Mark Rutland , "Martin K. Petersen" , Paolo Bonzini , Christian Borntraeger , Christoffer Dall , Dave Kleikamp , Jan Kara , Luis de Bethencourt , Marc Zyngier , Rik van Riel , Matthew Garrett , linux-fsdevel@vger.kernel.org, linux-arch@vger.kernel.org, netdev@vger.kernel.org, kernel-hardening@lists.openwall.com List-ID: On Tue, 16 Jan 2018, Matthew Wilcox wrote: > On Tue, Jan 16, 2018 at 12:17:01PM -0600, Christopher Lameter wrote: > > Draft patch of how the data structs could change. kmem_cache_attr is read > > only. > > Looks good. Although I would add Kees' user feature: Sure I tried to do this quickly so that the basic struct changes are visible. > And I'd start with > +struct kmem_cache *kmem_cache_create_attr(const kmem_cache_attr *); > > leaving the old kmem_cache_create to kmalloc a kmem_cache_attr and > initialise it. Well at some point we should convert the callers by putting the definitions into const kmem_cache_attr initializations. That way the callbacks function pointers are safe. > Can we also do something like this? > > -#define KMEM_CACHE(__struct, __flags) kmem_cache_create(#__struct,\ > - sizeof(struct __struct), __alignof__(struct __struct),\ > - (__flags), NULL) > +#define KMEM_CACHE(__struct, __flags) ({ \ > + const struct kmem_cache_attr kca ## __stringify(__struct) = { \ > + .name = #__struct, \ > + .size = sizeof(struct __struct), \ > + .align = __alignof__(struct __struct), \ > + .flags = (__flags), \ > + }; \ > + kmem_cache_create_attr(&kca ## __stringify(__struct)); \ > +}) > > That way we won't need to convert any of those users. Yep thats what I was planning.