From patchwork Fri Nov 10 20:08:26 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: David Gow X-Patchwork-Id: 163971 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:b129:0:b0:403:3b70:6f57 with SMTP id q9csp1356482vqs; Fri, 10 Nov 2023 12:08:49 -0800 (PST) X-Google-Smtp-Source: AGHT+IE+QUNuWo6CNYtCvp6QXrpMIBeELMAcQe9NO3LPR+GUsAMsK0QLtvK5N2Wk4tAc/Uvoao8b X-Received: by 2002:a17:90b:4f45:b0:280:3f25:66c9 with SMTP id pj5-20020a17090b4f4500b002803f2566c9mr37284pjb.46.1699646929339; Fri, 10 Nov 2023 12:08:49 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1699646929; cv=none; d=google.com; s=arc-20160816; b=BBSv3oDT4frFe7HpxhtCCIrDStuvc9w+VrzZFvQbX5ytLuezRCahFhlyMnjV+WcEou IWPRnsMsx/2GS6sdH7XfNmN+TmFgHS2Fa7+/V8O2w2Q/NcFd87E6r7Q8e0R0GIsTqgQW UTw+OUpo4ZjkCZaDkT0YBVooYBkcO9axMhHCgShJLrWx9g3S5qI1co1NWqwr39Al9FcM eFe5OQD87T+5EgO1Xr2eglkxMfJdBFRB/5sw7TEG2pPJz6ny4Z21qrBqtEtbq233u96z LcVmD/Ktn6hn9WwClmUUb5LwmH2h34uY5g7DMQmA1c/k3gB034tzqaXGflBbIrIuEIeC 0CWg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:cc:to:from:subject:message-id:mime-version:date :dkim-signature; bh=4YunHZgtb5nkD4PkAgnIRkW9gO+ZcmaQMUyBJXXvNgg=; fh=fw/ICFUgIHKxEvGzcb1nqRaBxv6W2r+qkaBevzEf3G0=; b=f46DhDLS7vHXEsI1eHNtTvWvCNDJztXZn7wJTX3Hm+yMUNsSszWJgmebawkaj8pKWt 0QoP8NSY/xcX/sQIxzTyXZgazBnw+MzZrXRKaEg/q34Wy2v6AHx8hMIM/4AikspMiEE9 esOLavpjxQIBxrZzxPsvNiXNq+qchmsQg2XDEV3lfmd7IYGrMkdQR4T1boabB6rLj6Ci b3MtUmvdcQinjdzmDH+5sWnjGpM2CZTvbo40IOosxFWubSo13xSSu7KVSW4TZp858H30 qajFmFmkD+OGlXeAgBnCnQCpSTwhBDzgLctxrMpUbzWt5iK2U9bEbYHZrXMPqxuM4cqh fC8Q== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@google.com header.s=20230601 header.b=tE8oHGWZ; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:7 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Received: from snail.vger.email (snail.vger.email. [2620:137:e000::3:7]) by mx.google.com with ESMTPS id t9-20020a17090abc4900b0027d0bf1eef1si237228pjv.98.2023.11.10.12.08.48 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 10 Nov 2023 12:08:49 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:7 as permitted sender) client-ip=2620:137:e000::3:7; Authentication-Results: mx.google.com; dkim=pass header.i=@google.com header.s=20230601 header.b=tE8oHGWZ; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:7 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Received: from out1.vger.email (depot.vger.email [IPv6:2620:137:e000::3:0]) by snail.vger.email (Postfix) with ESMTP id 341C48040D42; Fri, 10 Nov 2023 12:08:48 -0800 (PST) X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.103.11 at snail.vger.email Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1344581AbjKJUIp (ORCPT + 29 others); Fri, 10 Nov 2023 15:08:45 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:49982 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S234879AbjKJUIn (ORCPT ); Fri, 10 Nov 2023 15:08:43 -0500 Received: from mail-yb1-xb4a.google.com (mail-yb1-xb4a.google.com [IPv6:2607:f8b0:4864:20::b4a]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 5119EE5 for ; Fri, 10 Nov 2023 12:08:39 -0800 (PST) Received: by mail-yb1-xb4a.google.com with SMTP id 3f1490d57ef6-da39d244087so3112222276.3 for ; Fri, 10 Nov 2023 12:08:39 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1699646918; x=1700251718; darn=vger.kernel.org; h=cc:to:from:subject:message-id:mime-version:date:from:to:cc:subject :date:message-id:reply-to; bh=4YunHZgtb5nkD4PkAgnIRkW9gO+ZcmaQMUyBJXXvNgg=; b=tE8oHGWZbUBGyyJNmf7x2wgf8HTQb2oxOBTGnjdTnkGDx2nRbo2SIvZAE6KJgAyyjF gc9EF7wUYm8f4ZlCg9yrCarKo/GJyAt5lnOFWBXfM/SJulEMMGWJxZ9eyl0yhiqasprV Il5CQ2yO1Jd5szCNxfBiSfNdR97iric9T85I2R9xkXfRH0Hu85OVEV8gQVpYq79exny3 fFIaihfN5sTGPbEzdQNOkvRPii7SboB1CJoSeXWXdbol+5/6Kd+UJ6haQ+sK4vMfN8H5 fIXp6OoacNCkCfDiT5HqWrfP9jQoExEldZFUV76EvrzXVYzaVDLs9YayU5pFJjZPKb8N 3u+g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1699646918; x=1700251718; h=cc:to:from:subject:message-id:mime-version:date:x-gm-message-state :from:to:cc:subject:date:message-id:reply-to; bh=4YunHZgtb5nkD4PkAgnIRkW9gO+ZcmaQMUyBJXXvNgg=; b=kCvH6r96cdK8DuFA1toPI/hCpkDzGcXpA9PZ3Itqc9oMzJVVwl9oYnrah5EXhFdX+o VptwOvbJtmZi/g0UNWWGYiqoNkcKXk/eu+7K2MdBfeyIQp6YQ3CN+922am7VNLPHopU+ 2oSAJKe8Dat95Nvmv1vQP/6VKfznhwyOlJRVaVHVpoN9sauZsgEdOc8qYoGt5T4B6DWO IcVzoFNyGad3+ENQMjXt4Gr1FRFs+Atg2sp9Fm3166sACWumIxm/4wUS7P2Jy8//v7o0 EFuhQ64giRZeLyICCLSftcdcHeYJ8soY+hLOAPWvt1BKSanfk/8+GnqwmlePSPivOLtI 8gng== X-Gm-Message-State: AOJu0Yx/EcKxJIYTvV0m0ybF8UCRaTWqJLYimduGVv0BJSy9SORATjQ7 Jy9gZ2ddlOWiPhXh5kdANszPSsZQV0E3eA== X-Received: from slicestar.c.googlers.com ([fda3:e722:ac3:cc00:4f:4b78:c0a8:20a1]) (user=davidgow job=sendgmr) by 2002:a25:d849:0:b0:d9a:f3dc:7d18 with SMTP id p70-20020a25d849000000b00d9af3dc7d18mr3271ybg.13.1699646918475; Fri, 10 Nov 2023 12:08:38 -0800 (PST) Date: Sat, 11 Nov 2023 04:08:26 +0800 Mime-Version: 1.0 X-Mailer: git-send-email 2.42.0.869.gea05f2083d-goog Message-ID: <20231110200830.1832556-1-davidgow@google.com> Subject: [PATCH 1/3] kunit: Add a macro to wrap a deferred action function From: David Gow To: Nathan Chancellor , Kees Cook , Brendan Higgins , Rae Moar , dlatypov@google.com, Maxime Ripard , Arthur Grillo , Shuah Khan Cc: David Gow , " =?utf-8?q?Ma=C3=ADra_Canal?= " , Sami Tolvanen , kunit-dev@googlegroups.com, llvm@lists.linux.dev, linux-hardening@vger.kernel.org, linux-kselftest@vger.kernel.org, Benjamin Berg , Richard Fitzgerald , linux-kernel@vger.kernel.org, Maarten Lankhorst , Thomas Zimmermann , Emma Anholt , David Airlie , Daniel Vetter , dri-devel@lists.freedesktop.org X-Spam-Status: No, score=-9.6 required=5.0 tests=BAYES_00,DKIMWL_WL_MED, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF, RCVD_IN_DNSWL_BLOCKED,SPF_HELO_NONE,SPF_PASS,T_SCC_BODY_TEXT_LINE, USER_IN_DEF_DKIM_WL autolearn=unavailable autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.6.4 (snail.vger.email [0.0.0.0]); Fri, 10 Nov 2023 12:08:48 -0800 (PST) X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1782208978293524671 X-GMAIL-MSGID: 1782208978293524671 KUnit's deferred action API accepts a void(*)(void *) function pointer which is called when the test is exited. However, we very frequently want to use existing functions which accept a single pointer, but which may not be of type void*. While this is probably dodgy enough to be on the wrong side of the C standard, it's been often used for similar callbacks, and gcc's -Wcast-function-type seems to ignore cases where the only difference is the type of the argument, assuming it's compatible (i.e., they're both pointers to data). However, clang 16 has introduced -Wcast-function-type-strict, which no longer permits any deviation in function pointer type. This seems to be because it'd break CFI, which validates the type of function calls. This rather ruins our attempts to cast functions to defer them, and leaves us with a few options. The one we've chosen is to implement a macro which will generate a wrapper function which accepts a void*, and casts the argument to the appropriate type. For example, if you were trying to wrap: void foo_close(struct foo *handle); you could use: KUNIT_DEFINE_ACTION_WRAPPER(kunit_action_foo_close, foo_close, struct foo *); This would create a new kunit_action_foo_close() function, of type kunit_action_t, which could be passed into kunit_add_action() and similar functions. In addition to defining this macro, update KUnit and its tests to use it. Link: https://github.com/ClangBuiltLinux/linux/issues/1750 Signed-off-by: David Gow Reviewed-by: Nathan Chancellor Tested-by: Nathan Chancellor Reviewed-by: Maxime Ripard Acked-by: Daniel Vetter for merging through kunit --- This is a follow-up to the RFC here: https://lore.kernel.org/linux-kselftest/20230915050125.3609689-1-davidgow@google.com/ There's no difference in the macro implementation, just an update to the KUnit tests to use it. This version is intended to complement: https://lore.kernel.org/all/20231106172557.2963-1-rf@opensource.cirrus.com/ There are also two follow-up patches in the series to use this macro in various DRM tests. Hopefully this will solve any CFI issues that show up with KUnit. Thanks, -- David --- include/kunit/resource.h | 9 +++++++++ lib/kunit/kunit-test.c | 5 +---- lib/kunit/test.c | 6 ++++-- 3 files changed, 14 insertions(+), 6 deletions(-) diff --git a/include/kunit/resource.h b/include/kunit/resource.h index c7383e90f5c9..4110e13970dc 100644 --- a/include/kunit/resource.h +++ b/include/kunit/resource.h @@ -390,6 +390,15 @@ void kunit_remove_resource(struct kunit *test, struct kunit_resource *res); /* A 'deferred action' function to be used with kunit_add_action. */ typedef void (kunit_action_t)(void *); +/* We can't cast function pointers to kunit_action_t if CFI is enabled. */ +#define KUNIT_DEFINE_ACTION_WRAPPER(wrapper, orig, arg_type) \ + static void wrapper(void *in) \ + { \ + arg_type arg = (arg_type)in; \ + orig(arg); \ + } + + /** * kunit_add_action() - Call a function when the test ends. * @test: Test case to associate the action with. diff --git a/lib/kunit/kunit-test.c b/lib/kunit/kunit-test.c index de2113a58fa0..ee6927c60979 100644 --- a/lib/kunit/kunit-test.c +++ b/lib/kunit/kunit-test.c @@ -538,10 +538,7 @@ static struct kunit_suite kunit_resource_test_suite = { #if IS_BUILTIN(CONFIG_KUNIT_TEST) /* This avoids a cast warning if kfree() is passed direct to kunit_add_action(). */ -static void kfree_wrapper(void *p) -{ - kfree(p); -} +KUNIT_DEFINE_ACTION_WRAPPER(kfree_wrapper, kfree, const void *); static void kunit_log_test(struct kunit *test) { diff --git a/lib/kunit/test.c b/lib/kunit/test.c index f2eb71f1a66c..0308865194bb 100644 --- a/lib/kunit/test.c +++ b/lib/kunit/test.c @@ -772,6 +772,8 @@ static struct notifier_block kunit_mod_nb = { }; #endif +KUNIT_DEFINE_ACTION_WRAPPER(kfree_action_wrapper, kfree, const void *) + void *kunit_kmalloc_array(struct kunit *test, size_t n, size_t size, gfp_t gfp) { void *data; @@ -781,7 +783,7 @@ void *kunit_kmalloc_array(struct kunit *test, size_t n, size_t size, gfp_t gfp) if (!data) return NULL; - if (kunit_add_action_or_reset(test, (kunit_action_t *)kfree, data) != 0) + if (kunit_add_action_or_reset(test, kfree_action_wrapper, data) != 0) return NULL; return data; @@ -793,7 +795,7 @@ void kunit_kfree(struct kunit *test, const void *ptr) if (!ptr) return; - kunit_release_action(test, (kunit_action_t *)kfree, (void *)ptr); + kunit_release_action(test, kfree_action_wrapper, (void *)ptr); } EXPORT_SYMBOL_GPL(kunit_kfree); From patchwork Fri Nov 10 20:08:27 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: David Gow X-Patchwork-Id: 163972 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:b129:0:b0:403:3b70:6f57 with SMTP id q9csp1356519vqs; Fri, 10 Nov 2023 12:08:53 -0800 (PST) X-Google-Smtp-Source: AGHT+IFXglfJXZW6yDs0Mvp8FYbvkAg1sS6cGXDpse//PpCtvYGvV4YE7gn3ilWXqDNWXKZrCJxa X-Received: by 2002:a17:90b:3b47:b0:280:e0:9071 with SMTP id ot7-20020a17090b3b4700b0028000e09071mr83982pjb.28.1699646933142; Fri, 10 Nov 2023 12:08:53 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1699646933; cv=none; d=google.com; s=arc-20160816; b=O//vDSWD2kFmGWL2iakro35khsZg+w/dM3MZ2Bar4ziSt8VzQ/fOV8JS6qHyYjj4Mt cXzKZGU+972oDqMcVcU8R8btwmCQIo/ExsXP9QTWVNZsCtTgEXnA+L4FmM7q6FTXI/o7 0HAdyLfy0vcFN6215hTAitTM2ZBymFPNn5WsKrfH1znEeSLiqe1kQOBF5s0VICSlQTRN AWh1rPYQt0ZyBhCPug5RQZKEB3B3eSF1ZO2wvXY4OJZAjDszIRdMk2081BhHGdkZoEn9 0vj+Ok4WRJlmJLs/3EQ04d4W9Qk9UBLUCZcAdEwePmUrg2SzAhUWQXM100FmeYd3ii0x EV8g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:cc:to:from:subject:message-id:references :mime-version:in-reply-to:date:dkim-signature; bh=51fJBfx3imxlXxpJCLaVZXz5cvn77oR86IbzpiZXKNs=; fh=fw/ICFUgIHKxEvGzcb1nqRaBxv6W2r+qkaBevzEf3G0=; b=eS0EfcJaTg1pjBPD6W+YgXJClcQwFvhjRnrI79m7UC4ogr4hp/H32ZaV+QpIFSS/YE iZ5fVGNamF+rFo3rjve/TfVm+0vWRYXy1TcKBnvFIDk0wEyI14UOydxFS3gMfT4gMfsw qspagtKrsFWrAomtZURJ9wb8vUYj3afqgvGs7WCa+sEaUoZAjaDZ2LYO7SEIawKOCovF Wu4f8C688baeVQIAiLd3go2FjWu/XgruvhVjlyJnxzSYzh4nznHNzcZl4IG1c3R/CGHn K2ERv1kXJxFuICrMYNkx6i0ko03aEb1E95r6lQ6gmIMJmW0EfKsz+slE3HOlROlagIZU utXA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@google.com header.s=20230601 header.b=Z8z0hd3r; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:7 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Received: from snail.vger.email (snail.vger.email. [2620:137:e000::3:7]) by mx.google.com with ESMTPS id so10-20020a17090b1f8a00b00279020d1fb0si249307pjb.129.2023.11.10.12.08.52 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 10 Nov 2023 12:08:53 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:7 as permitted sender) client-ip=2620:137:e000::3:7; Authentication-Results: mx.google.com; dkim=pass header.i=@google.com header.s=20230601 header.b=Z8z0hd3r; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:7 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Received: from out1.vger.email (depot.vger.email [IPv6:2620:137:e000::3:0]) by snail.vger.email (Postfix) with ESMTP id 48A3C83D1BA3; Fri, 10 Nov 2023 12:08:52 -0800 (PST) X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.103.11 at snail.vger.email Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1345701AbjKJUIs (ORCPT + 29 others); Fri, 10 Nov 2023 15:08:48 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:50018 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1345235AbjKJUIr (ORCPT ); Fri, 10 Nov 2023 15:08:47 -0500 Received: from mail-yb1-xb4a.google.com (mail-yb1-xb4a.google.com [IPv6:2607:f8b0:4864:20::b4a]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 98606C6 for ; Fri, 10 Nov 2023 12:08:43 -0800 (PST) Received: by mail-yb1-xb4a.google.com with SMTP id 3f1490d57ef6-dae71322ed4so3022351276.1 for ; Fri, 10 Nov 2023 12:08:43 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1699646923; x=1700251723; darn=vger.kernel.org; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=51fJBfx3imxlXxpJCLaVZXz5cvn77oR86IbzpiZXKNs=; b=Z8z0hd3rLiSBV1f7Bl/bch+Tx+/+iZQFB1vZWYMcF4yhbJ2WW9dLRvw9ghPIw3ton/ D7VUgsAgzqGQBQiAIu6k0HE9GiL5tw1nYVvcl88RFGE36J+f6f2VAfFQSK0/xXPEo1FN AHkz61ADkq3ZlXuHSIYA15/cfCcY1CkuzJ0c93ukLURMJ9HrLb09RiKnxdX4EEktjU6G Z/7yB97kcUhDBlQaLTk5E6WnGD3MGnnubTqOkyAwzRlhhEMSOZocrY7UVFbvJnbA966R VTPboVNN5AdLNxUroFO4CBImuDhi1wn1dmb9SiCMdGYTMJMuerSqsJLiRJDkAXIV/2/E jNKw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1699646923; x=1700251723; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=51fJBfx3imxlXxpJCLaVZXz5cvn77oR86IbzpiZXKNs=; b=lYgXt3VwAwnZ0lkgOc0qkut0k0moZNdk9dUgaCC98wHyqEFKnuT1zY/LBn8m82pnVf /MSVVKziIBj2n+Ei249WmWV5kIYRIbNNmlNhEoFp6beLERLBCIS6e8EE28Ar2VMxJ0L5 37ANspGg9yIuqTS6QagVrBWuMG0lkGYWTi1jiIpXq6LZ5b2yQQV2mpHqeH5ATFFLsych 0qjUNB/cdulbNCE/yKaeW+LuoXZNaCbcpLs4XYSPqnQgM1XOp6tQfuHj08+4BUr1h7/l VErrF/Wvg7MhyZK+J+YisSYqt9D21kkFMKaspS31R8rwd1kJHYzSo0GWtaVrryrEIeMK Xgzw== X-Gm-Message-State: AOJu0YxM31d8vZUV7b4jI8jVoqZ3pCa2F5TUZH3PvlTeBChGyfip58Rv u7Oun6G+KNZ3iXRfH9aECcbjue4l6Pe9Qg== X-Received: from slicestar.c.googlers.com ([fda3:e722:ac3:cc00:4f:4b78:c0a8:20a1]) (user=davidgow job=sendgmr) by 2002:a05:6902:182:b0:d9a:ec95:9687 with SMTP id t2-20020a056902018200b00d9aec959687mr3348ybh.11.1699646922890; Fri, 10 Nov 2023 12:08:42 -0800 (PST) Date: Sat, 11 Nov 2023 04:08:27 +0800 In-Reply-To: <20231110200830.1832556-1-davidgow@google.com> Mime-Version: 1.0 References: <20231110200830.1832556-1-davidgow@google.com> X-Mailer: git-send-email 2.42.0.869.gea05f2083d-goog Message-ID: <20231110200830.1832556-2-davidgow@google.com> Subject: [PATCH 2/3] drm/tests: Use KUNIT_DEFINE_ACTION_WRAPPER() From: David Gow To: Nathan Chancellor , Kees Cook , Brendan Higgins , Rae Moar , dlatypov@google.com, Maxime Ripard , Arthur Grillo , Shuah Khan Cc: David Gow , " =?utf-8?q?Ma=C3=ADra_Canal?= " , Sami Tolvanen , kunit-dev@googlegroups.com, llvm@lists.linux.dev, linux-hardening@vger.kernel.org, linux-kselftest@vger.kernel.org, Benjamin Berg , Richard Fitzgerald , linux-kernel@vger.kernel.org, Maarten Lankhorst , Thomas Zimmermann , Emma Anholt , David Airlie , Daniel Vetter , dri-devel@lists.freedesktop.org X-Spam-Status: No, score=-9.6 required=5.0 tests=BAYES_00,DKIMWL_WL_MED, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF, RCVD_IN_DNSWL_BLOCKED,SPF_HELO_NONE,SPF_PASS,T_SCC_BODY_TEXT_LINE, USER_IN_DEF_DKIM_WL autolearn=unavailable autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.6.4 (snail.vger.email [0.0.0.0]); Fri, 10 Nov 2023 12:08:52 -0800 (PST) X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1782208982814060746 X-GMAIL-MSGID: 1782208982814060746 In order to pass functions to kunit_add_action(), they need to be of the kunit_action_t type. While casting the function pointer can work, it will break control-flow integrity. drm_kunit_helpers already defines wrappers, but we now have a macro which does this automatically. Using this greatly reduces the boilerplate needed. Signed-off-by: David Gow Acked-by: Maxime Ripard --- This patch should be a no-op, just moving to use a standard macro to implement these wrappers rather than hand-coding them. Let me know if you'd prefer to take these in separately via the drm trees, or if you're okay with having this whole series go via kselftest/kunit. Cheers, -- David --- drivers/gpu/drm/tests/drm_kunit_helpers.c | 30 +++++++---------------- 1 file changed, 9 insertions(+), 21 deletions(-) diff --git a/drivers/gpu/drm/tests/drm_kunit_helpers.c b/drivers/gpu/drm/tests/drm_kunit_helpers.c index bccb33b900f3..c251e6b34de0 100644 --- a/drivers/gpu/drm/tests/drm_kunit_helpers.c +++ b/drivers/gpu/drm/tests/drm_kunit_helpers.c @@ -27,27 +27,15 @@ static struct platform_driver fake_platform_driver = { }, }; -static void kunit_action_platform_driver_unregister(void *ptr) -{ - struct platform_driver *drv = ptr; - - platform_driver_unregister(drv); - -} - -static void kunit_action_platform_device_put(void *ptr) -{ - struct platform_device *pdev = ptr; - - platform_device_put(pdev); -} - -static void kunit_action_platform_device_del(void *ptr) -{ - struct platform_device *pdev = ptr; - - platform_device_del(pdev); -} +KUNIT_DEFINE_ACTION_WRAPPER(kunit_action_platform_driver_unregister, + platform_driver_unregister, + struct platform_driver *); +KUNIT_DEFINE_ACTION_WRAPPER(kunit_action_platform_device_put, + platform_device_put, + struct platform_device *); +KUNIT_DEFINE_ACTION_WRAPPER(kunit_action_platform_device_del, + platform_device_del, + struct platform_device *); /** * drm_kunit_helper_alloc_device - Allocate a mock device for a KUnit test From patchwork Fri Nov 10 20:08:28 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: David Gow X-Patchwork-Id: 163973 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:b129:0:b0:403:3b70:6f57 with SMTP id q9csp1356573vqs; Fri, 10 Nov 2023 12:08:59 -0800 (PST) X-Google-Smtp-Source: AGHT+IHq55IDtNGsIDCmS9rTm2hVQ/hjXwFuVFGsPh9I5TRbBl8X44ASinBu2zYcbH1WxRwOK0Jc X-Received: by 2002:a05:6a00:1593:b0:6be:2649:8c6b with SMTP id u19-20020a056a00159300b006be26498c6bmr53568pfk.32.1699646939565; Fri, 10 Nov 2023 12:08:59 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1699646939; cv=none; d=google.com; s=arc-20160816; b=KCmsDERHLnIGcE6q2q3BtbUCAh7D4EMgh9MSkMO0mAyrkjATmw8sdTQEJSHlR/dhn1 /ZUG3DkNApqZmUjUJv/TN1DwoOKRc7QZTh/1ysRrKX9cUYstt7GlRJdwHzq3EPLSlL0B DpeVcIUOM8Xrl14PbrYS/CySfytU1CqbjfoQ6FksG51i013KrHO4IYPww3IYYFj9eOyS vXS1tjBhm7PZeNCIZSPfP6Z2MAktC8CpjtNLluSxj8ZandBhlBCz+X/PgMWLRsCkdI7J XnCA7iippUf+Rr9ZMkqcP7sjotOHozmPL0FCVBCXt616cjbwfMXqpZTwWjkhOAx2LKhX Hgog== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:cc:to:from:subject:message-id:references :mime-version:in-reply-to:date:dkim-signature; bh=IAkJ89LUqtxG0K+MSJnco+XQD27u+TKLaVoOcPh4bOc=; fh=fw/ICFUgIHKxEvGzcb1nqRaBxv6W2r+qkaBevzEf3G0=; b=cGAhE1L7xPk73NqNGOOIUdZXlCD1MG4snTZv1mwUyRD2T5qBxgRvjszCZUe38tsQvr dlhmvV1UHfg0MlhQnA7Ci/zcazBlA/lnv3/XHpZcbhP7Iqq8BYj4C2FbjEvO1iSNmWzV IbxZ/F12sR4w9hLZLO0417CZbgk/WI0aeezLs39EOd+tvTjZBQf6BC618hali5oeTBFP c9fnrsLyk1KViv0QvBsSplzL3rtKk5nA30PV+Fi/KfxlH4QK5gcNyQBSg1PyTN4JgsAb WdrT9cCQdzmqS+hmw9m8sMw38yzVKP/oR56Cr7F1zmJ2+zLUoBoSPyY9+oWutXvd6m// xmHQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@google.com header.s=20230601 header.b=JAujfGHJ; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.37 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Received: from snail.vger.email (snail.vger.email. [23.128.96.37]) by mx.google.com with ESMTPS id i14-20020a6561ae000000b005b95fbb1745si141557pgv.562.2023.11.10.12.08.59 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 10 Nov 2023 12:08:59 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.37 as permitted sender) client-ip=23.128.96.37; Authentication-Results: mx.google.com; dkim=pass header.i=@google.com header.s=20230601 header.b=JAujfGHJ; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.37 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Received: from out1.vger.email (depot.vger.email [IPv6:2620:137:e000::3:0]) by snail.vger.email (Postfix) with ESMTP id D91BA83D1BB8; Fri, 10 Nov 2023 12:08:58 -0800 (PST) X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.103.11 at snail.vger.email Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1345754AbjKJUIz (ORCPT + 29 others); Fri, 10 Nov 2023 15:08:55 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:50044 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S234972AbjKJUIu (ORCPT ); Fri, 10 Nov 2023 15:08:50 -0500 Received: from mail-yb1-xb4a.google.com (mail-yb1-xb4a.google.com [IPv6:2607:f8b0:4864:20::b4a]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id C7551D1 for ; Fri, 10 Nov 2023 12:08:47 -0800 (PST) Received: by mail-yb1-xb4a.google.com with SMTP id 3f1490d57ef6-da31ec03186so1935894276.1 for ; Fri, 10 Nov 2023 12:08:47 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1699646927; x=1700251727; darn=vger.kernel.org; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=IAkJ89LUqtxG0K+MSJnco+XQD27u+TKLaVoOcPh4bOc=; b=JAujfGHJ8yOYNMAj+/UzMg5ghYS5kqcl7r5wvrjHHCdl2sM8xOiTkUGnVaF+EHQjJb TmJhenOTUE/qPxBsjJBqd7QjAUK89cbdB2q1c7corDKfnE2MywVyc4qjt2FMEwkQaUqA JLopDWEh9Zx6/9lehNFw0qyeeunwaCl3uO2oj/yVVL6EeBZFs80cjPKM1MxFsuubgqZm 22YQEEAIjx0YRE7ZRv6AW7TsH4v6Bk9y2NYAkZIXYVKPKPdyCQFiz5UYFVzVbqd8ZJbg nAsYZInmjMEDKXuvMtX6lr2Urrl+kIUb81TOODAcX6wlIIdlBiY4HC+oOBC3CurBJGCu Ll4Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1699646927; x=1700251727; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=IAkJ89LUqtxG0K+MSJnco+XQD27u+TKLaVoOcPh4bOc=; b=oXCzEf3OrSvNuiR0Hq7WtwjSaqPm0+5jQcevNeSDAAopZrfBk8PQJVLg55ww+wWx+Q Wt5ICoBOYoOOu9JM1USrEenhO5/yysNNhnudHFDne7HMC1b+l4E5B7p73Dk/NA/lB6II EB2Ln+ocxl4nj+cnazP0bcydgae8irfRftNp+IECFX3oVVl2JGTtBZzdNufplU+Nwpyb NMW1pFyyvhtwSEnrLR1z/rUlKSr9WhTVt2JCg0ilo6MgzFY/bjaDsYc/itI/SmZVQYli 1QFPq8+ZzD21fcy9Dkv67dphR6NPnuL9WwqwYbcLN/6dGK0p0nF6JXrzvKG36e1JXyxs pu6A== X-Gm-Message-State: AOJu0YxaeO4cykclkLEpzMubhJPmusX7u1s43rtnaocC4XfDt4016lYl wv7TxUXyifxhP1OxS2IQhqmWl7dBPg3y2Q== X-Received: from slicestar.c.googlers.com ([fda3:e722:ac3:cc00:4f:4b78:c0a8:20a1]) (user=davidgow job=sendgmr) by 2002:a05:6902:18d:b0:d89:42d7:e72d with SMTP id t13-20020a056902018d00b00d8942d7e72dmr141489ybh.3.1699646927074; Fri, 10 Nov 2023 12:08:47 -0800 (PST) Date: Sat, 11 Nov 2023 04:08:28 +0800 In-Reply-To: <20231110200830.1832556-1-davidgow@google.com> Mime-Version: 1.0 References: <20231110200830.1832556-1-davidgow@google.com> X-Mailer: git-send-email 2.42.0.869.gea05f2083d-goog Message-ID: <20231110200830.1832556-3-davidgow@google.com> Subject: [PATCH 3/3] drm/vc4: tests: Use KUNIT_DEFINE_ACTION_WRAPPER From: David Gow To: Nathan Chancellor , Kees Cook , Brendan Higgins , Rae Moar , dlatypov@google.com, Maxime Ripard , Arthur Grillo , Shuah Khan Cc: David Gow , " =?utf-8?q?Ma=C3=ADra_Canal?= " , Sami Tolvanen , kunit-dev@googlegroups.com, llvm@lists.linux.dev, linux-hardening@vger.kernel.org, linux-kselftest@vger.kernel.org, Benjamin Berg , Richard Fitzgerald , linux-kernel@vger.kernel.org, Maarten Lankhorst , Thomas Zimmermann , Emma Anholt , David Airlie , Daniel Vetter , dri-devel@lists.freedesktop.org X-Spam-Status: No, score=-9.6 required=5.0 tests=BAYES_00,DKIMWL_WL_MED, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF, RCVD_IN_DNSWL_BLOCKED,SPF_HELO_NONE,SPF_PASS,T_SCC_BODY_TEXT_LINE, USER_IN_DEF_DKIM_WL autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.6.4 (snail.vger.email [0.0.0.0]); Fri, 10 Nov 2023 12:08:58 -0800 (PST) X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1782208989092339331 X-GMAIL-MSGID: 1782208989092339331 In order to pass functions to kunit_add_action(), they need to be of the kunit_action_t type. While casting the function pointer can work, it will break control-flow integrity. vc4_mock already defines such a wrapper for drm_dev_unregister(), but it involves less boilerplate to use the new macro, so replace the manual implementation. Signed-off-by: David Gow --- This patch should be a no-op, just moving to use a standard macro to implement these wrappers rather than hand-coding them. Let me know if you'd prefer to take these in separately via the drm trees, or if you're okay with having this whole series go via kselftest/kunit. Cheers, -- David --- drivers/gpu/drm/vc4/tests/vc4_mock.c | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/drivers/gpu/drm/vc4/tests/vc4_mock.c b/drivers/gpu/drm/vc4/tests/vc4_mock.c index 63ca46f4cb35..becb3dbaa548 100644 --- a/drivers/gpu/drm/vc4/tests/vc4_mock.c +++ b/drivers/gpu/drm/vc4/tests/vc4_mock.c @@ -153,12 +153,9 @@ static int __build_mock(struct kunit *test, struct drm_device *drm, return 0; } -static void kunit_action_drm_dev_unregister(void *ptr) -{ - struct drm_device *drm = ptr; - - drm_dev_unregister(drm); -} +KUNIT_DEFINE_ACTION_WRAPPER(kunit_action_drm_dev_unregister, + drm_dev_unregister, + struct drm_device *); static struct vc4_dev *__mock_device(struct kunit *test, bool is_vc5) {