Message ID | 20130925171243.GA7428@tcpepper-desk.jf.intel.com (mailing list archive) |
---|---|
State | Not Applicable |
Headers | show |
* Timothy Pepper <timothy.c.pepper@linux.intel.com> wrote: > On Wed 25 Sep at 09:30:49 +0200 mingo@kernel.org said: > > > info.flags = VM_UNMAPPED_AREA_TOPDOWN; > > > info.length = len; > > > - info.low_limit = PAGE_SIZE; > > > + info.low_limit = max(PAGE_SIZE, PAGE_ALIGN(mmap_min_addr)); > > > info.high_limit = mm->mmap_base; > > > info.align_mask = filp ? get_align_mask() : 0; > > > info.align_offset = pgoff << PAGE_SHIFT; > > > > There appears to be a lot of repetition in these methods - instead of > > changing 6 places it would be more future-proof to first factor out the > > common bits and then to apply the fix to the shared implementation. > > Besides that existing redundancy in the multiple somewhat similar > arch_get_unmapped_area_topdown() functions, I was expecting people might > question the added redundancy of the six instances of: > > max(PAGE_SIZE, PAGE_ALIGN(mmap_min_addr)); That redundancy would be automatically addressed by my suggestion. Thanks, Ingo
On Wed 25 Sep at 19:44:36 +0200 mingo@kernel.org said: > > * Timothy Pepper <timothy.c.pepper@linux.intel.com> wrote: > > > On Wed 25 Sep at 09:30:49 +0200 mingo@kernel.org said: > > > > info.flags = VM_UNMAPPED_AREA_TOPDOWN; > > > > info.length = len; > > > > - info.low_limit = PAGE_SIZE; > > > > + info.low_limit = max(PAGE_SIZE, PAGE_ALIGN(mmap_min_addr)); > > > > info.high_limit = mm->mmap_base; > > > > info.align_mask = filp ? get_align_mask() : 0; > > > > info.align_offset = pgoff << PAGE_SHIFT; > > > > > > There appears to be a lot of repetition in these methods - instead of > > > changing 6 places it would be more future-proof to first factor out the > > > common bits and then to apply the fix to the shared implementation. > > > > Besides that existing redundancy in the multiple somewhat similar > > arch_get_unmapped_area_topdown() functions, I was expecting people might > > question the added redundancy of the six instances of: > > > > max(PAGE_SIZE, PAGE_ALIGN(mmap_min_addr)); > > That redundancy would be automatically addressed by my suggestion. Yes. I'm looking at the cleanup and will post a bisectable series that introduces a common helper, addes the calls to use that helper where applicable (looks like it might be a few dozen per arch locations), and then the single line change for the topdown case within the common helper to do: info->low_limit = max(PAGE_SIZE, PAGE_ALIGN(mmap_min_addr));
diff --git a/security/min_addr.c b/security/min_addr.c --- a/security/min_addr.c +++ b/security/min_addr.c @@ -14,14 +14,16 @@ unsigned long dac_mmap_min_addr = CONFIG_DEFAULT_MMAP_MIN_ADDR; */ static void update_mmap_min_addr(void) { + unsigned long addr; #ifdef CONFIG_LSM_MMAP_MIN_ADDR if (dac_mmap_min_addr > CONFIG_LSM_MMAP_MIN_ADDR) - mmap_min_addr = dac_mmap_min_addr; + addr = dac_mmap_min_addr; else - mmap_min_addr = CONFIG_LSM_MMAP_MIN_ADDR; + addr = CONFIG_LSM_MMAP_MIN_ADDR; #else - mmap_min_addr = dac_mmap_min_addr; + addr = dac_mmap_min_addr; #endif + mmap_min_addr = max(PAGE_SIZE, PAGE_ALIGN(addr)); } /*