Received: by 2002:a25:4158:0:0:0:0:0 with SMTP id o85csp5169639yba; Wed, 10 Apr 2019 12:58:21 -0700 (PDT) X-Google-Smtp-Source: APXvYqzf6Qc7oPOg8B0sHGdjSZLtvOOUYYwWBl+woF77x7O/eI+/d278dlQQVvfTVps5dqqFclgI X-Received: by 2002:a65:63d5:: with SMTP id n21mr33961472pgv.330.1554926301709; Wed, 10 Apr 2019 12:58:21 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1554926301; cv=none; d=google.com; s=arc-20160816; b=fwXRuNF0qz5sHcR/IXq1LEjABwvypoqD+/EkFgELeQItsWKXE7XQWwpstY070+p73D Jlgq2rSUgVdWC5Y6cs5fx0eQDYgwrnvZsWsvlkgyBisCmtxnG5MfOQVnixTNybj0obN4 0vYkpS4VnEhR9Z81+sJgYCm9P1dxZiwTcZq+vBJpSQplmsYs9zN4PbWgaYOdsQAoZNRd MOD4d2QQ+JnZQJ4dZ1vJSp+1IEC5ErfiFgu5usAGTv8RhBwMXjkKTUin8mmIl9eKNids Hs7lUQke73LGJR67NsP4F2u5TSKhGEdKWC/wJVCTO2drrqmCZDWEt9uUzMu9bc8KsGSG 7Ylw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :message-id:date:subject:cc:to:from:dkim-signature; bh=T6Rg88aOAsFuASkW0lngbtXxdztNb7Uj9gIPChv2xDg=; b=YRU1xsoPHaNthLcFrZVQI2zH8X+i3WKTu/2R05vbNBUSAEa+qG0nkT55ntq1axV1ne pkfrUAuZhygNdRe6vqWwVnnBPBiffJfoAW6Kku0ibhonsThxjWMcFKov7cp/+cpEdIxn er2iodkqWc7SivJ7S17aPW1NyBCymM0WjWdQnStMtn+VP6uV3CMVSGMsNlNanq8X8dfX ZznZXUEoHRGho+L/Z/45InZxJ8CmN9kBuLAN6UOcWWEZ9kwpj1MlJFD9HRXtJtDgM7o8 HAJfq2pxlgJAlNC1IP12yRM4/7dAjlls168ArzfL2wzTnQB4iNShKt6Y9dCW/aS8i5TW wc8w== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@joelfernandes.org header.s=google header.b=nAn+V0M7; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id j71si15388087pge.190.2019.04.10.12.58.06; Wed, 10 Apr 2019 12:58:21 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@joelfernandes.org header.s=google header.b=nAn+V0M7; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726672AbfDJT51 (ORCPT + 99 others); Wed, 10 Apr 2019 15:57:27 -0400 Received: from mail-pl1-f194.google.com ([209.85.214.194]:40010 "EHLO mail-pl1-f194.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726038AbfDJT51 (ORCPT ); Wed, 10 Apr 2019 15:57:27 -0400 Received: by mail-pl1-f194.google.com with SMTP id b3so2043954plr.7 for ; Wed, 10 Apr 2019 12:57:27 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=joelfernandes.org; s=google; h=from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=T6Rg88aOAsFuASkW0lngbtXxdztNb7Uj9gIPChv2xDg=; b=nAn+V0M7OY8g5dMyOPn2KXwLUWbVvngXjTZPfTTw/OhT+KFSM+gOxxgAWsYZGEFP1D 8ppImtf7O9RckICqlzErXj0E83HGy3uNv7TDeGZHmSuJMKZhCQVld02N4VDxYx8IdYVw YVZATb+BlZAzUOBrC+GHiiNniV2bBuTQD784I= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=T6Rg88aOAsFuASkW0lngbtXxdztNb7Uj9gIPChv2xDg=; b=UQpgfmuAkxvegqPC2dEfSNB06RPvLo35M9/VnD8/Y4VcDOgkj/GbZadQIOPrkiTeSS CxbwLyb+MT+9HD0imGKwBl9ffWzSXpnc1C9Ml448l2nj0F7UZquBR9l26+f5NoNjKQwC VM970+1Bff77TunHHZrpAtPwY45M9ntvPGqJFlNuPjiwjDtYzPE9yHHuSUbJpYCO/XJL NjyUbC1XDazNbvrK4UFwu1PL6SEbpyhY2L4yQ/8/1DtUoVzlH+sktX4BsZGInGc5NP2N X2ggk5sI1Oh6pE28VS7sQmrSsUEvW/2/r9TGqEUHLWxWpY4VlCrUW4ccznmhf5A9R/eU 59lg== X-Gm-Message-State: APjAAAXb/EdXH+pOHx4+4lJLF01G007jDTcMsbmO+4+IabyKYyVGfiNG rXdJ+qbrC7sl0BuwoPIQvAXME1/Z64Q= X-Received: by 2002:a17:902:a9c7:: with SMTP id b7mr43911944plr.145.1554926246076; Wed, 10 Apr 2019 12:57:26 -0700 (PDT) Received: from joelaf.cam.corp.google.com ([2620:15c:6:12:9c46:e0da:efbf:69cc]) by smtp.gmail.com with ESMTPSA id v12sm48703375pfe.148.2019.04.10.12.57.24 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 10 Apr 2019 12:57:25 -0700 (PDT) From: "Joel Fernandes (Google)" To: linux-kernel@vger.kernel.org Cc: "Joel Fernandes (Google)" , paulmck@linux.vnet.ibm.com, rostedt@goodmis.org, mathieu.desnoyers@efficios.com, rcu@vger.kernel.org, kernel-hardening@lists.openwall.com, kernel-team@android.com, keescook@chromium.org, Jessica Yu Subject: [PATCH v3 1/3] module: Prepare for addition of new ro_after_init sections Date: Wed, 10 Apr 2019 15:57:06 -0400 Message-Id: <20190410195708.162185-1-joel@joelfernandes.org> X-Mailer: git-send-email 2.21.0.392.gf8f6787159e-goog MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org For the purposes of hardening modules by adding sections to ro_after_init sections, prepare for addition of new ro_after_init entries which we do in future patches. Create a table to which new entries could be added later. This makes it less error prone and reduce code duplication. Cc: paulmck@linux.vnet.ibm.com Cc: rostedt@goodmis.org Cc: mathieu.desnoyers@efficios.com Cc: rcu@vger.kernel.org Cc: kernel-hardening@lists.openwall.com Cc: kernel-team@android.com Suggested-by: keescook@chromium.org Reviewed-by: keescook@chromium.org Acked-by: rostedt@goodmis.org Signed-off-by: Joel Fernandes (Google) --- kernel/module.c | 41 +++++++++++++++++++++++------------------ 1 file changed, 23 insertions(+), 18 deletions(-) diff --git a/kernel/module.c b/kernel/module.c index 524da609c884..42e4e289d6c7 100644 --- a/kernel/module.c +++ b/kernel/module.c @@ -3300,11 +3300,27 @@ static bool blacklisted(const char *module_name) } core_param(module_blacklist, module_blacklist, charp, 0400); +/* + * Mark ro_after_init section with SHF_RO_AFTER_INIT so that + * layout_sections() can put it in the right place. + * Note: ro_after_init sections also have SHF_{WRITE,ALLOC} set. + */ +static const char * const ro_after_init_sections[] = { + ".data..ro_after_init", + + /* + * __jump_table structures are never modified, with the exception of + * entries that refer to code in the __init section, which are + * annotated as such at module load time. + */ + "__jump_table", +}; + static struct module *layout_and_allocate(struct load_info *info, int flags) { struct module *mod; unsigned int ndx; - int err; + int err, i; err = check_modinfo(info->mod, info, flags); if (err) @@ -3319,23 +3335,12 @@ static struct module *layout_and_allocate(struct load_info *info, int flags) /* We will do a special allocation for per-cpu sections later. */ info->sechdrs[info->index.pcpu].sh_flags &= ~(unsigned long)SHF_ALLOC; - /* - * Mark ro_after_init section with SHF_RO_AFTER_INIT so that - * layout_sections() can put it in the right place. - * Note: ro_after_init sections also have SHF_{WRITE,ALLOC} set. - */ - ndx = find_sec(info, ".data..ro_after_init"); - if (ndx) - info->sechdrs[ndx].sh_flags |= SHF_RO_AFTER_INIT; - /* - * Mark the __jump_table section as ro_after_init as well: these data - * structures are never modified, with the exception of entries that - * refer to code in the __init section, which are annotated as such - * at module load time. - */ - ndx = find_sec(info, "__jump_table"); - if (ndx) - info->sechdrs[ndx].sh_flags |= SHF_RO_AFTER_INIT; + /* Set sh_flags for read-only after init sections */ + for (i = 0; i < ARRAY_SIZE(ro_after_init_sections); i++) { + ndx = find_sec(info, ro_after_init_sections[i]); + if (ndx) + info->sechdrs[ndx].sh_flags |= SHF_RO_AFTER_INIT; + } /* Determine total sizes, and put offsets in sh_entsize. For now this is done generically; there doesn't appear to be any -- 2.21.0.392.gf8f6787159e-goog