|
|
Message-ID: <15d83270-7a91-436f-1aab-0f6001954f4a@redhat.com>
Date: Wed, 6 Dec 2017 10:57:19 -0800
From: Laura Abbott <labbott@...hat.com>
To: Alexander Popov <alex.popov@...ux.com>,
kernel-hardening@...ts.openwall.com, Kees Cook <keescook@...omium.org>,
PaX Team <pageexec@...email.hu>, Brad Spengler <spender@...ecurity.net>,
Ingo Molnar <mingo@...nel.org>, Andy Lutomirski <luto@...nel.org>,
Tycho Andersen <tycho@...ho.ws>, Mark Rutland <mark.rutland@....com>,
Ard Biesheuvel <ard.biesheuvel@...aro.org>, Borislav Petkov <bp@...en8.de>,
Thomas Gleixner <tglx@...utronix.de>, "H . Peter Anvin" <hpa@...or.com>,
Peter Zijlstra <a.p.zijlstra@...llo.nl>, x86@...nel.org
Subject: Re: [PATCH RFC v6 2/6] gcc-plugins: Add STACKLEAK plugin for tracking
the kernel stack
On 12/05/2017 03:33 PM, Alexander Popov wrote:
> +__visible int plugin_init(struct plugin_name_args *plugin_info,
> + struct plugin_gcc_version *version)
> +{
> + const char * const plugin_name = plugin_info->base_name;
> + const int argc = plugin_info->argc;
> + const struct plugin_argument * const argv = plugin_info->argv;
> + int i;
> +
> + /* Extra GGC root tables describing our GTY-ed data */
> + static const struct ggc_root_tab gt_ggc_r_gt_stackleak[] = {
> + {
> + .base = &track_function_decl,
> + .nelt = 1,
> + .stride = sizeof(track_function_decl),
> + .cb = >_ggc_mx_tree_node,
> + .pchw = >_pch_nx_tree_node
> + },
> + {
> + .base = &check_function_decl,
> + .nelt = 1,
> + .stride = sizeof(check_function_decl),
> + .cb = >_ggc_mx_tree_node,
> + .pchw = >_pch_nx_tree_node
> + },
> + LAST_GGC_ROOT_TAB
> + };
> +
> + /*
> + * The stackleak_tree_instrument pass should be executed before the
> + * "optimized" pass, which is the control flow graph cleanup that is
> + * performed just before expanding gcc trees to the RTL. In former
> + * versions of the plugin this new pass was inserted before the
> + * "tree_profile" pass, which is currently called "profile".
> + */
> + PASS_INFO(stackleak_tree_instrument, "optimized", 1,
> + PASS_POS_INSERT_BEFORE);
> +
> + /*
> + * The stackleak_final pass should be executed before the "final" pass,
> + * which turns the RTL (Register Transfer Language) into assembly.
> + */
> + PASS_INFO(stackleak_final, "final", 1, PASS_POS_INSERT_BEFORE);
> +
> + if (!plugin_default_version_check(version, &gcc_version)) {
> + error(G_("incompatible gcc/plugin versions"));
> + return 1;
> + }
> +
> + /* Parse the plugin arguments */
> + if (argc != 1) {
> + error(G_("bad number of the plugin arguments: %d"), argc);
> + return 1;
> + }
> +
> + if (strcmp(argv[i].key, "track-min-size")) {
> + error(G_("unknown option '-fplugin-arg-%s-%s'"),
> + plugin_name, argv[i].key);
> + return 1;
> + }
> +
> + if (!argv[i].value) {
> + error(G_("no value supplied for option '-fplugin-arg-%s-%s'"),
> + plugin_name, argv[i].key);
> + return 1;
> + }
> +
> + track_frame_size = atoi(argv[i].value);
> + if (track_frame_size < 0) {
> + error(G_("invalid option argument '-fplugin-arg-%s-%s=%s'"),
> + plugin_name, argv[i].key, argv[i].value);
> + return 1;
> + }
I don't see i getting updated anywhere, which seems to be an artifact of
removing the for loop. I'd prefer if you just kept the loop since the
arm64 version requires a --disable option like structleak.
Thanks,
Laura
Powered by blists - more mailing lists
Confused about mailing lists and their use? Read about mailing lists on Wikipedia and check out these guidelines on proper formatting of your messages.