Received: by 2002:a05:6a10:9848:0:0:0:0 with SMTP id x8csp978867pxf; Thu, 18 Mar 2021 16:57:08 -0700 (PDT) X-Google-Smtp-Source: ABdhPJweRcRyCJ6tBDr0R3vJwkU2XnfnfHFhWomWFP0LUeXXjhqO7ft4okyBmOVqMSXaSFiPPORa X-Received: by 2002:a05:6402:5113:: with SMTP id m19mr6723935edd.78.1616111828018; Thu, 18 Mar 2021 16:57:08 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1616111828; cv=none; d=google.com; s=arc-20160816; b=KvPOqKoSoxcIjSjk2dAVBlwRBZhhFtRQk1JEF8DnE7A5tZ457FviWkHfxTJHPB/dX6 3GHXwnrmAgmp65rUy2muStuLbvsEgVN5AQ+ho/X7fWVMiZBcQE1fZ0yL++siY6j/jpWv 7GoANXW7u3RgcmcyD5Nk6cWTcfJhqj2z9YP1jhwV5brw0u6YOD0PEJ4TF2eOidzHGr6l pbjPBfJOF0fl0Mmr5SW8IUnmfqrpMBWqaWn6x5B5Ke6rsKX4e7w/xuuUduUe1OAhX0ij Q3e1CtX+eohch6w+ibjmSQA8wEpbcMRcDDys066yiq+U1BOLWql2lCNloMKQlo1+K4Am qebQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=7hUuphUSwp1IoZeGVtvLATDDtgHRmQpDvtY9aJO+C/Q=; b=QKWmf8o2XTlHR9cOBuGXCd5Snr+gR6HKEMhxDV2ZObpSNgrvIx5g0qjTSKlmSTmZ1w 2yJSxpoUwg5FweEj1XV3ae9oRFPQyUUDtq942ubTXs4tVXQuJ6da7kNzGLYX0A9aubXv fLTJNlCNrzT3iTTqEHxKS3uz3ML3iSRlQiFZzu1nFOErpTeEj5LlA3uPik3MVrqzX/eW AOiVhsVv4aUnR1vM0OSe0WI9yDmUNwFNt9R7G704CQHm/47Dlgju5/ju2o+uC0thjPfa mUk1Ukxmh72JPkmIhgTpeBYSXQ5zjmsA/wtHbAsPPnqx/N6Kqu8mRYyV3uOcs2Hinnuk tGHQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@chromium.org header.s=google header.b=KUrUcrQr; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=chromium.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id p10si2746725edw.62.2021.03.18.16.56.46; Thu, 18 Mar 2021 16:57:08 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@chromium.org header.s=google header.b=KUrUcrQr; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=chromium.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S233327AbhCRXzU (ORCPT + 99 others); Thu, 18 Mar 2021 19:55:20 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:36604 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232273AbhCRXys (ORCPT ); Thu, 18 Mar 2021 19:54:48 -0400 Received: from mail-pj1-x102b.google.com (mail-pj1-x102b.google.com [IPv6:2607:f8b0:4864:20::102b]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 8513BC06174A for ; Thu, 18 Mar 2021 16:54:48 -0700 (PDT) Received: by mail-pj1-x102b.google.com with SMTP id nh23-20020a17090b3657b02900c0d5e235a8so3968800pjb.0 for ; Thu, 18 Mar 2021 16:54:48 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=7hUuphUSwp1IoZeGVtvLATDDtgHRmQpDvtY9aJO+C/Q=; b=KUrUcrQrNMyP4vVIk00GJ9UR/kv5wCQ6sYLjVFcZumfp056yrovv+rmcbLMFD7r4WJ 2IuE3rahTrsrxcMK0MmGPrL/noOhZAP5ZRKdw6TPSjkSOK97u5bIqusIhVhgNBMEfXZr Z5OpVdRVkB8Li4Jqi+I6lFqZD325YA6BxTvBU= 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:in-reply-to :references:mime-version:content-transfer-encoding; bh=7hUuphUSwp1IoZeGVtvLATDDtgHRmQpDvtY9aJO+C/Q=; b=DxdywO/YfbVySiLEu3Nrw/AUE+5WsX/z9LHsl5xEteulegzmNI8ahA6z6NCIMDVKJ3 lSbjGJNmbldTFseIU+m5HUFHP2R9U9at7WfL8oTTyevzaL4klKwlEjhgQrc3FsfsEjBh oHoBQaS7tmxwc7Xv0fwmAJrkq26+WKSe1xyXjzCVm33i5qX6NWTocfp8Y0YyUGqfy+vd mb+c4YAhrX7KU4Yzktoc5OzmUp7vcrZVLhf/tFAGUR0XM0ZG5gBTaMU4brxaPbvji451 eTkL3J6yJKlmYJ4Vp7m/tK6fcYl/Xl78y6BhXnq1ZupgvBOVWGBFJ9n/VIDfQrupzpgZ XTqA== X-Gm-Message-State: AOAM533czrFx5ftK+hsOm5B2aj6QTQBBskl1yJEmknAc41AaxqjFIfTo dnvFcsVaMKXrTDGFqPeFidhxbQ== X-Received: by 2002:a17:90a:f2d2:: with SMTP id gt18mr6833009pjb.210.1616111688131; Thu, 18 Mar 2021 16:54:48 -0700 (PDT) Received: from drinkcat2.tpe.corp.google.com ([2401:fa00:1:b:dc70:2def:a801:e21b]) by smtp.gmail.com with ESMTPSA id t7sm3295816pfg.69.2021.03.18.16.54.46 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 18 Mar 2021 16:54:47 -0700 (PDT) From: Nicolas Boichat To: stable@vger.kernel.org Cc: Mark Rutland , Arnd Bergmann , Greg Kroah-Hartman , Kees Cook , Nicolas Boichat , clang-built-linux@googlegroups.com, linux-kernel@vger.kernel.org Subject: [for-stable-4.19 PATCH 2/2] lkdtm: don't move ctors to .rodata Date: Fri, 19 Mar 2021 07:54:16 +0800 Message-Id: <20210319075410.for-stable-4.19.2.I0387622b15d84eed675e48a0ba3be9c03b9f9e97@changeid> X-Mailer: git-send-email 2.31.0.rc2.261.g7f71774620-goog In-Reply-To: <20210318235416.794798-1-drinkcat@chromium.org> References: <20210318235416.794798-1-drinkcat@chromium.org> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Mark Rutland commit 3f618ab3323407ee4c6a6734a37eb6e9663ebfb9 upstream. When building with KASAN and LKDTM, clang may implictly generate an asan.module_ctor function in the LKDTM rodata object. The Makefile moves the lkdtm_rodata_do_nothing() function into .rodata by renaming the file's .text section to .rodata, and consequently also moves the ctor function into .rodata, leading to a boot time crash (splat below) when the ctor is invoked by do_ctors(). Let's prevent this by marking the function as noinstr rather than notrace, and renaming the file's .noinstr.text to .rodata. Marking the function as noinstr will prevent tracing and kprobes, and will inhibit any undesireable compiler instrumentation. The ctor function (if any) will be placed in .text and will work correctly. Example splat before this patch is applied: [ 0.916359] Unable to handle kernel execute from non-executable memory at virtual address ffffa0006b60f5ac [ 0.922088] Mem abort info: [ 0.922828] ESR = 0x8600000e [ 0.923635] EC = 0x21: IABT (current EL), IL = 32 bits [ 0.925036] SET = 0, FnV = 0 [ 0.925838] EA = 0, S1PTW = 0 [ 0.926714] swapper pgtable: 4k pages, 48-bit VAs, pgdp=00000000427b3000 [ 0.928489] [ffffa0006b60f5ac] pgd=000000023ffff003, p4d=000000023ffff003, pud=000000023fffe003, pmd=0068000042000f01 [ 0.931330] Internal error: Oops: 8600000e [#1] PREEMPT SMP [ 0.932806] Modules linked in: [ 0.933617] CPU: 0 PID: 1 Comm: swapper/0 Not tainted 5.10.0-rc7 #2 [ 0.935620] Hardware name: linux,dummy-virt (DT) [ 0.936924] pstate: 40400005 (nZcv daif +PAN -UAO -TCO BTYPE=--) [ 0.938609] pc : asan.module_ctor+0x0/0x14 [ 0.939759] lr : do_basic_setup+0x4c/0x70 [ 0.940889] sp : ffff27b600177e30 [ 0.941815] x29: ffff27b600177e30 x28: 0000000000000000 [ 0.943306] x27: 0000000000000000 x26: 0000000000000000 [ 0.944803] x25: 0000000000000000 x24: 0000000000000000 [ 0.946289] x23: 0000000000000001 x22: 0000000000000000 [ 0.947777] x21: ffffa0006bf4a890 x20: ffffa0006befb6c0 [ 0.949271] x19: ffffa0006bef9358 x18: 0000000000000068 [ 0.950756] x17: fffffffffffffff8 x16: 0000000000000000 [ 0.952246] x15: 0000000000000000 x14: 0000000000000000 [ 0.953734] x13: 00000000838a16d5 x12: 0000000000000001 [ 0.955223] x11: ffff94000da74041 x10: dfffa00000000000 [ 0.956715] x9 : 0000000000000000 x8 : ffffa0006b60f5ac [ 0.958199] x7 : f9f9f9f9f9f9f9f9 x6 : 000000000000003f [ 0.959683] x5 : 0000000000000040 x4 : 0000000000000000 [ 0.961178] x3 : ffffa0006bdc15a0 x2 : 0000000000000005 [ 0.962662] x1 : 00000000000000f9 x0 : ffffa0006bef9350 [ 0.964155] Call trace: [ 0.964844] asan.module_ctor+0x0/0x14 [ 0.965895] kernel_init_freeable+0x158/0x198 [ 0.967115] kernel_init+0x14/0x19c [ 0.968104] ret_from_fork+0x10/0x30 [ 0.969110] Code: 00000003 00000000 00000000 00000000 (00000000) [ 0.970815] ---[ end trace b5339784e20d015c ]--- Cc: Arnd Bergmann Cc: Greg Kroah-Hartman Cc: Kees Cook Acked-by: Kees Cook Signed-off-by: Mark Rutland Link: https://lore.kernel.org/r/20201207170533.10738-1-mark.rutland@arm.com Signed-off-by: Greg Kroah-Hartman Signed-off-by: Nicolas Boichat --- drivers/misc/lkdtm/Makefile | 2 +- drivers/misc/lkdtm/rodata.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/drivers/misc/lkdtm/Makefile b/drivers/misc/lkdtm/Makefile index cce47a15a79f..aeb960cb096d 100644 --- a/drivers/misc/lkdtm/Makefile +++ b/drivers/misc/lkdtm/Makefile @@ -13,7 +13,7 @@ KCOV_INSTRUMENT_rodata.o := n OBJCOPYFLAGS := OBJCOPYFLAGS_rodata_objcopy.o := \ - --rename-section .text=.rodata,alloc,readonly,load + --rename-section .noinstr.text=.rodata,alloc,readonly,load targets += rodata.o rodata_objcopy.o $(obj)/rodata_objcopy.o: $(obj)/rodata.o FORCE $(call if_changed,objcopy) diff --git a/drivers/misc/lkdtm/rodata.c b/drivers/misc/lkdtm/rodata.c index 58d180af72cf..baacb876d1d9 100644 --- a/drivers/misc/lkdtm/rodata.c +++ b/drivers/misc/lkdtm/rodata.c @@ -5,7 +5,7 @@ */ #include "lkdtm.h" -void notrace lkdtm_rodata_do_nothing(void) +void noinstr lkdtm_rodata_do_nothing(void) { /* Does nothing. We just want an architecture agnostic "return". */ } -- 2.31.0.rc2.261.g7f71774620-goog