LKML Archive on lore.kernel.org help / color / mirror / Atom feed
From: Igor Stoppa <igor.stoppa@huawei.com> To: Matthew Wilcox <willy@infradead.org> Cc: <david@fromorbit.com>, <rppt@linux.vnet.ibm.com>, <keescook@chromium.org>, <mhocko@kernel.org>, <labbott@redhat.com>, <linux-security-module@vger.kernel.org>, <linux-mm@kvack.org>, <linux-kernel@vger.kernel.org>, <kernel-hardening@lists.openwall.com> Subject: Re: [PATCH 5/8] Protectable Memory Date: Wed, 14 Mar 2018 15:02:06 +0200 [thread overview] Message-ID: <eb9bc944-b1de-48d9-652f-9f898ec4fcec@huawei.com> (raw) In-Reply-To: <20180314121547.GE29631@bombadil.infradead.org> On 14/03/18 14:15, Matthew Wilcox wrote: > On Tue, Mar 13, 2018 at 11:45:51PM +0200, Igor Stoppa wrote: >> +static inline void *pmalloc_array(struct gen_pool *pool, size_t n, >> + size_t size, gfp_t flags) >> +{ >> + if (unlikely(!(pool && n && size))) >> + return NULL; > > Why not use the same formula as kvmalloc_array here? You've failed to > protect against integer overflow, which is the whole point of pmalloc_array. > > if (size != 0 && n > SIZE_MAX / size) > return NULL; oops :-( >> +static inline char *pstrdup(struct gen_pool *pool, const char *s, gfp_t gfp) >> +{ >> + size_t len; >> + char *buf; >> + >> + if (unlikely(pool == NULL || s == NULL)) >> + return NULL; > > No, delete these checks. They'll mask real bugs. I thought I got rid of all of them, but some have escaped me >> +static inline void pfree(struct gen_pool *pool, const void *addr) >> +{ >> + gen_pool_free(pool, (unsigned long)addr, 0); >> +} > > It's poor form to use a different subsystem's type here. It ties you > to genpool, so if somebody wants to replace it, you have to go through > all the users and change them. If you use your own type, it's a much > easier task. I thought about it, but typedef came to my mind and knowing it's usually frowned upon, I restrained myself. > struct pmalloc_pool { > struct gen_pool g; > } I didn't think this could be acceptable either. But if it is, then ok. > then: > > static inline void pfree(struct pmalloc_pool *pool, const void *addr) > { > gen_pool_free(&pool->g, (unsigned long)addr, 0); > } > > Looking further down, you could (should) move the contents of pmalloc_data > into pmalloc_pool; that's one fewer object to keep track of. > >> +struct pmalloc_data { >> + struct gen_pool *pool; /* Link back to the associated pool. */ >> + bool protected; /* Status of the pool: RO or RW. */ >> + struct kobj_attribute attr_protected; /* Sysfs attribute. */ >> + struct kobj_attribute attr_avail; /* Sysfs attribute. */ >> + struct kobj_attribute attr_size; /* Sysfs attribute. */ >> + struct kobj_attribute attr_chunks; /* Sysfs attribute. */ >> + struct kobject *pool_kobject; >> + struct list_head node; /* list of pools */ >> +}; > > sysfs attributes aren't free, you know. I appreciate you want something > to help debug / analyse, but having one file for the whole subsystem or > at least one per pool would be a better idea. Which means that it should not be normal sysfs, but rather debugfs, if I understand correctly, since in sysfs 1 value -> 1 file. -- igor
next prev parent reply other threads:[~2018-03-14 13:02 UTC|newest] Thread overview: 26+ messages / expand[flat|nested] mbox.gz Atom feed top 2018-03-13 21:45 [RFC PATCH v19 0/8] mm: security: ro protection for dynamic data Igor Stoppa 2018-03-13 21:45 ` [PATCH 1/8] genalloc: track beginning of allocations Igor Stoppa 2018-03-13 21:45 ` [PATCH 2/8] Add label to genalloc.rst for cross reference Igor Stoppa 2018-03-13 21:45 ` [PATCH 3/8] genalloc: selftest Igor Stoppa 2018-03-13 21:45 ` [PATCH 4/8] struct page: add field for vm_struct Igor Stoppa 2018-03-13 22:00 ` Matthew Wilcox 2018-03-14 17:43 ` J Freyensee 2018-03-15 9:38 ` Igor Stoppa 2018-03-15 18:51 ` J Freyensee 2018-03-13 21:45 ` [PATCH 5/8] Protectable Memory Igor Stoppa 2018-03-14 12:15 ` Matthew Wilcox 2018-03-14 13:02 ` Igor Stoppa [this message] 2018-03-14 17:40 ` J Freyensee 2018-03-13 21:45 ` [PATCH 6/8] Pmalloc selftest Igor Stoppa 2018-03-14 12:25 ` Matthew Wilcox 2018-03-25 1:32 ` Igor Stoppa 2018-03-13 21:45 ` [PATCH 7/8] lkdtm: crash on overwriting protected pmalloc var Igor Stoppa 2018-03-13 21:45 ` [PATCH 8/8] Documentation for Pmalloc Igor Stoppa 2018-03-14 11:21 ` [RFC PATCH v19 0/8] mm: security: ro protection for dynamic data Igor Stoppa 2018-03-14 11:56 ` Matthew Wilcox 2018-03-14 12:55 ` Igor Stoppa 2018-03-14 13:04 ` Matthew Wilcox 2018-03-14 16:11 ` Igor Stoppa 2018-03-14 17:33 ` Matthew Wilcox 2018-03-15 13:43 ` Igor Stoppa 2018-03-19 18:04 ` Igor Stoppa
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=eb9bc944-b1de-48d9-652f-9f898ec4fcec@huawei.com \ --to=igor.stoppa@huawei.com \ --cc=david@fromorbit.com \ --cc=keescook@chromium.org \ --cc=kernel-hardening@lists.openwall.com \ --cc=labbott@redhat.com \ --cc=linux-kernel@vger.kernel.org \ --cc=linux-mm@kvack.org \ --cc=linux-security-module@vger.kernel.org \ --cc=mhocko@kernel.org \ --cc=rppt@linux.vnet.ibm.com \ --cc=willy@infradead.org \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).