From patchwork Wed Mar 5 09:33:14 2014 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Daniel Vetter X-Patchwork-Id: 3772001 Return-Path: X-Original-To: patchwork-intel-gfx@patchwork.kernel.org Delivered-To: patchwork-parsemail@patchwork2.web.kernel.org Received: from mail.kernel.org (mail.kernel.org [198.145.19.201]) by patchwork2.web.kernel.org (Postfix) with ESMTP id 2D4E7BF13A for ; Wed, 5 Mar 2014 09:33:28 +0000 (UTC) Received: from mail.kernel.org (localhost [127.0.0.1]) by mail.kernel.org (Postfix) with ESMTP id 33EA720220 for ; Wed, 5 Mar 2014 09:33:27 +0000 (UTC) Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) by mail.kernel.org (Postfix) with ESMTP id E5AC82021F for ; Wed, 5 Mar 2014 09:33:25 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id E6067FA429; Wed, 5 Mar 2014 01:33:24 -0800 (PST) X-Original-To: intel-gfx@lists.freedesktop.org Delivered-To: intel-gfx@lists.freedesktop.org Received: from mail-ea0-f175.google.com (mail-ea0-f175.google.com [209.85.215.175]) by gabe.freedesktop.org (Postfix) with ESMTP id 0FAD5FA429 for ; Wed, 5 Mar 2014 01:33:22 -0800 (PST) Received: by mail-ea0-f175.google.com with SMTP id d10so873714eaj.6 for ; Wed, 05 Mar 2014 01:33:22 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ffwll.ch; s=google; h=from:to:cc:subject:date:message-id; bh=BsYjBm1QDcLZAQ8QvmxV0E5MCgOES66HNIp6EIx5EhY=; b=ZfXVg8Ls5x8YmsbLsdOi9Eh5lP3/X3P9EEaHLFnFUNaWXX16e7Pyg7qH3zcJ+vMSek qcBixdXM1cRFnc3MqAi40RvOFLeJ+j45VHn6Bs6bqunf6+mkA+lP4HU2t7g8yBVXdxDe V8W8Gd/koXZIFGDaHgzo+qi1tCAdLH8wRl18Q= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:from:to:cc:subject:date:message-id; bh=BsYjBm1QDcLZAQ8QvmxV0E5MCgOES66HNIp6EIx5EhY=; b=f9qZ44ci6xyjfE4Q1N12h8g0vXIBC0ffXFrUBbNz51XR7l6eQ8jIOg8pty/qYuMyDD LeUQNRB3CArv+GV0jNU1gElpLlZjGUZfE5tfzXpVUnYkWQyDTZ2h0178TRVtpY0QWQq4 YYWE9oEHLwHCxhE0ru4uDLq0v68BrA4rwZ3VZEFkaLozd4gABTQl2GUATI8ATmfNYRZW x/cAQvBNZuUfzI8sEbwQSIXf2wS8cXI80RDtlRIzGeOUxKnUaD4UU+6zXVb0CGlMRBiH 8lBtYVAq90OOwtIpOaImQTMfHFUM6QOe780S27ywTfChJ0oOhKIfpEv/dnUpvCw09gKU X6jg== X-Gm-Message-State: ALoCoQnkGQ9YceYtbW40Is6Hae27ZGZHS9f3uDisLYCR+df87QhEgrGD+8XqT4JIUE2a3SmCPsem X-Received: by 10.14.246.196 with SMTP id q44mr4525399eer.45.1394012002020; Wed, 05 Mar 2014 01:33:22 -0800 (PST) Received: from phenom.ffwll.local (84-73-67-144.dclient.hispeed.ch. [84.73.67.144]) by mx.google.com with ESMTPSA id o5sm6670905eeg.8.2014.03.05.01.33.20 for (version=TLSv1.2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Wed, 05 Mar 2014 01:33:21 -0800 (PST) From: Daniel Vetter To: Intel Graphics Development Date: Wed, 5 Mar 2014 10:33:14 +0100 Message-Id: <1394011994-30604-1-git-send-email-daniel.vetter@ffwll.ch> X-Mailer: git-send-email 1.8.5.2 Cc: Li Zhong , Daniel Vetter , Rusty Russell , linux-kernel@vger.kernel.org, Jean Delvare , Andrew Morton , Jon Mason Subject: [Intel-gfx] [PATCH] [RFC] Taint the kernel for unsafe module options X-BeenThere: intel-gfx@lists.freedesktop.org X-Mailman-Version: 2.1.13 Precedence: list List-Id: Intel graphics driver community testing & development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Sender: intel-gfx-bounces@lists.freedesktop.org Errors-To: intel-gfx-bounces@lists.freedesktop.org X-Spam-Status: No, score=-4.1 required=5.0 tests=BAYES_00,DKIM_SIGNED, RCVD_IN_DNSWL_MED,RP_MATCHES_RCVD,T_DKIM_INVALID,UNPARSEABLE_RELAY autolearn=unavailable version=3.3.1 X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on mail.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP Users just love to set random piles of options since surely enabling all the experimental stuff helps. Later on we get bug reports because it all fell apart. Even more fun when it's labelled a regression when some change only just made the feature possible (e.g. stolen memory fixes suddenly making fbc possible). Make it clear that users are playing with fire here. In drm/i915 all these options follow the same pattern of using -1 as the per-machine default, and any other value being used for force the parameter. Adding a pile of cc's to solicit input and figure out whether this would be generally useful - this quick rfc is just for drm/i915. Cc: Rusty Russell Cc: Jean Delvare Cc: Andrew Morton Cc: Li Zhong Cc: Jon Mason Cc: linux-kernel@vger.kernel.org References: https://bugzilla.kernel.org/show_bug.cgi?id=71391 Signed-off-by: Daniel Vetter --- drivers/gpu/drm/i915/i915_params.c | 49 ++++++++++++++++++++++++++++++++++---- 1 file changed, 44 insertions(+), 5 deletions(-) diff --git a/drivers/gpu/drm/i915/i915_params.c b/drivers/gpu/drm/i915/i915_params.c index 3b482585c5ae..9cb89adeabcd 100644 --- a/drivers/gpu/drm/i915/i915_params.c +++ b/drivers/gpu/drm/i915/i915_params.c @@ -50,7 +50,46 @@ struct i915_params i915 __read_mostly = { .disable_display = 0, }; -module_param_named(modeset, i915.modeset, int, 0400); +int param_set_unsafe_int(const char *val, const struct kernel_param *kp) +{ + long l; + int ret; + + ret = kstrtol(val, 0, &l); + if (ret < 0 || ((int)l != l)) + return ret < 0 ? ret : -EINVAL; + + /* Taint if userspace overrides the kernel defaults. */ + if (l != -1) { + printk(KERN_WARNING "Setting dangerous option %s to non-default value!\n", + kp->name); + add_taint(TAINT_USER, LOCKDEP_STILL_OK); + } + + *((int *)kp->arg) = l; + return 0; +} + +struct kernel_param_ops param_ops_unsafe_int = { + .set = param_set_unsafe_int, + .get = param_get_int, +}; +/** + * module_param_unsafe_int_named - integer module param which taints the kernel + * @name: a valid C identifier which is the parameter name. + * @value: the actual lvalue to alter. + * @perm: visibility in sysfs. + * + * This is a special integer module parameter. The default is assumed to be -1, + * if any other values are set this will taint the kernel. Useful for debug and + * other dangerous options which users really shouldn't set normally. + */ +#define module_param_unsafe_int_named(name, value, perm) \ + param_check_int(name, &(value)); \ + module_param_cb(name, ¶m_ops_unsafe_int, &value, perm); \ + __MODULE_PARM_TYPE(name, "int") + +module_param_unsafe_int_named(modeset, i915.modeset, 0400); MODULE_PARM_DESC(modeset, "Use kernel modesetting [KMS] (0=DRM_I915_KMS from .config, " "1=on, -1=force vga console preference [default])"); @@ -64,12 +103,12 @@ module_param_named(powersave, i915.powersave, int, 0600); MODULE_PARM_DESC(powersave, "Enable powersavings, fbc, downclocking, etc. (default: true)"); -module_param_named(semaphores, i915.semaphores, int, 0400); +module_param_unsafe_int_named(semaphores, i915.semaphores, 0400); MODULE_PARM_DESC(semaphores, "Use semaphores for inter-ring sync " "(default: -1 (use per-chip defaults))"); -module_param_named(enable_rc6, i915.enable_rc6, int, 0400); +module_param_unsafe_int_named(enable_rc6, i915.enable_rc6, 0400); MODULE_PARM_DESC(enable_rc6, "Enable power-saving render C-state 6. " "Different stages can be selected via bitmask values " @@ -77,7 +116,7 @@ MODULE_PARM_DESC(enable_rc6, "For example, 3 would enable rc6 and deep rc6, and 7 would enable everything. " "default: -1 (use per-chip default)"); -module_param_named(enable_fbc, i915.enable_fbc, int, 0600); +module_param_unsafe_int_named(enable_fbc, i915.enable_fbc, 0600); MODULE_PARM_DESC(enable_fbc, "Enable frame buffer compression for power savings " "(default: -1 (use per-chip default))"); @@ -111,7 +150,7 @@ MODULE_PARM_DESC(enable_hangcheck, "WARNING: Disabling this can cause system wide hangs. " "(default: true)"); -module_param_named(enable_ppgtt, i915.enable_ppgtt, int, 0400); +module_param_unsafe_int_named(enable_ppgtt, i915.enable_ppgtt, 0400); MODULE_PARM_DESC(enable_ppgtt, "Override PPGTT usage. " "(-1=auto [default], 0=disabled, 1=aliasing, 2=full)");