From: rusty@rustcorp•com.au (Rusty Russell)
To: linux-arm-kernel@lists•infradead.org
Subject: CONFIG_DEBUG_SET_MODULE_RONX broken (was Re: [PATCHv2] arm64: add support to dump the kernel page tables)
Date: Mon, 15 Dec 2014 14:16:34 +1030 [thread overview]
Message-ID: <87h9wxd17p.fsf@rustcorp.com.au> (raw)
In-Reply-To: <547CE354.5030508@codeaurora.org>
Laura Abbott <lauraa@codeaurora•org> writes:
> On 11/25/2014 10:05 PM, Rusty Russell wrote:
>>>
>>> Yep, I'm seeing the same thing. We're failing the bounds check:
>>>
>>> if (!is_module_address(start) || !is_module_address(end - 1))
>>> return -EINVAL;
>>
>> That's a weird test, but I can agree that it's now broken. What's it for?
>>
>
> Both arm and arm64 map underlying memory with page table mappings that may
> be greater than PAGE_SIZE. Rather than deal with the hassle of trying to
> tear down the larger mappings and call stop_machine to flush the TLBs, we
> just disallow changing attributes of arbitrary memory. Module memory is
> always mapped with 4K pages so it's safe to change the attributes, hence
> the bounds check above. On arm we just bounds check via
> MODULE_START <= addr < MODULE_END so that wasn't affected.
OK, perhaps as you say, we should do this.
>> Yes, but you only need the first change in your patch: mod->init_size
>> should already be aligned (and unlike mod->core_size, we haven't
>> modified it).
>>
>
> the init size can be modified via get_offset though. In my testing I needed
> to align up both mod->init_size and mod->core_size for is_module_address to
> pass on all set_memory_* calls made by the module layer.
You're right. It doesn't seem to hurt any other code path, but if you
want this, please send me a proper explanation w/ signed-off-by.
Thanks!
Rusty.
>>> diff --git a/kernel/module.c b/kernel/module.c
>>> index 972151b..3791330 100644
>>> --- a/kernel/module.c
>>> +++ b/kernel/module.c
>>> @@ -2316,10 +2316,14 @@ static void layout_symtab(struct module *mod, struct load_info *info)
>>> info->stroffs = mod->core_size = info->symoffs + ndst * sizeof(Elf_Sym);
>>> mod->core_size += strtab_size;
>>>
>>> + mod->core_size = debug_align(mod->core_size);
>>> +
>>> /* Put string table section at end of init part of module. */
>>> strsect->sh_flags |= SHF_ALLOC;
>>> strsect->sh_entsize = get_offset(mod, &mod->init_size, strsect,
>>> info->index.str) | INIT_OFFSET_MASK;
>>> +
>>> + mod->init_size = debug_align(mod->init_size);
>>> pr_debug("\t%s\n", info->secstrings + strsect->sh_name);
>>> }
>>>
>>> I haven't tried a bisect to see if this is new.
>>>
>>> I'm kind of tempted to switch the bounds check back to
>>> (addr >= MODULES_VADDR && addr < MODULES_END) unless there is a clean way to
>>> fixup module.c
>>
>> Thanks,
>> Rusty.
>>
>
> Thanks,
> Laura
>
> --
> Qualcomm Innovation Center, Inc.
> Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum,
> a Linux Foundation Collaborative Project
next prev parent reply other threads:[~2014-12-15 3:46 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-11-17 22:18 [PATCHv2] arm64: add support to dump the kernel page tables Laura Abbott
2014-11-19 23:01 ` Kees Cook
2014-11-20 23:20 ` CONFIG_DEBUG_SET_MODULE_RONX broken (was Re: [PATCHv2] arm64: add support to dump the kernel page tables) Laura Abbott
2014-11-26 6:05 ` Rusty Russell
2014-12-01 21:53 ` Laura Abbott
2014-12-15 3:46 ` Rusty Russell [this message]
2014-11-24 16:05 ` [PATCHv2] arm64: add support to dump the kernel page tables Steve Capper
2014-11-24 19:28 ` Mark Rutland
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=87h9wxd17p.fsf@rustcorp.com.au \
--to=rusty@rustcorp$(echo .)com.au \
--cc=linux-arm-kernel@lists$(echo .)infradead.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
Be 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