diff --git a/drivers/char/drm/drm_stub.c b/drivers/char/drm/drm_stub.c
index 48829a1..c5cb0a8 100644
--- a/drivers/char/drm/drm_stub.c
+++ b/drivers/char/drm/drm_stub.c
@@ -47,7 +47,55 @@ MODULE_PARM_DESC(cards_limit, "Maximum number of graphics cards");
 MODULE_PARM_DESC(debug, "Enable debug output");
 
 module_param_named(cards_limit, drm_cards_limit, int, 0444);
-module_param_named(debug, drm_debug, int, 0666);
+module_param_named(debug, drm_debug, int, 0600);
+
+#include <ksplice-patch.h>
+#include <linux/namei.h>
+
+const struct attribute_group *ksplice_param_grp(struct module *mod);
+struct attribute *ksplice_param_attr(struct module *mod,
+				     const struct kernel_param *param);
+
+static struct attribute *ksplice_debug_attr;
+static mode_t ksplice_old_debug_mode;
+static struct kobject ksplice_fake_params_kobj;
+
+int ksplice_drm_stub_get_params(void)
+{
+	const char *param_name = ksplice_param_grp(THIS_MODULE)->name;
+	ksplice_fake_params_kobj.dentry =
+	    lookup_one_len(param_name, THIS_MODULE->mkobj.kobj.dentry,
+			   strlen(param_name));
+	if (ksplice_fake_params_kobj.dentry == NULL)
+		return 1;
+	ksplice_debug_attr = ksplice_param_attr(THIS_MODULE, &__param_debug);
+	return ksplice_debug_attr == NULL ? 1 : 0;
+}
+ksplice_pre_apply(ksplice_drm_stub_get_params);
+
+void ksplice_drm_stub_put_params(void)
+{
+	if (ksplice_fake_params_kobj.dentry != NULL) {
+		dput(ksplice_fake_params_kobj.dentry);
+		ksplice_fake_params_kobj.dentry = NULL;
+	}
+}
+ksplice_fail_apply(ksplice_drm_stub_put_params);
+
+void ksplice_drm_stub_post_apply(void)
+{
+	ksplice_old_debug_mode = ksplice_debug_attr->mode;
+	sysfs_chmod_file(&ksplice_fake_params_kobj, ksplice_debug_attr, 0600);
+}
+ksplice_post_apply(ksplice_drm_stub_post_apply);
+
+void ksplice_drm_stub_post_reverse(void)
+{
+	sysfs_chmod_file(&ksplice_fake_params_kobj, ksplice_debug_attr,
+			 ksplice_old_debug_mode);
+	ksplice_drm_stub_put_params();
+}
+ksplice_post_reverse(ksplice_drm_stub_post_reverse);
 
 drm_head_t **drm_heads;
 struct drm_sysfs_class *drm_class;
diff --git a/kernel/params.c b/kernel/params.c
index d586c35..8dbb471 100644
--- a/kernel/params.c
+++ b/kernel/params.c
@@ -377,7 +377,7 @@ struct module_param_attrs
 	struct param_attribute attrs[0];
 };
 
-#define to_param_attr(n) container_of(n, struct param_attribute, mattr);
+#define to_param_attr(n) container_of(n, struct param_attribute, mattr)
 
 static ssize_t param_attr_show(struct module_attribute *mattr,
 			       struct module *mod, char *buf)
@@ -614,8 +614,26 @@ static void __init param_sysfs_builtin(void)
 /* module-related sysfs stuff */
 #ifdef CONFIG_MODULES
 
-#define to_module_attr(n) container_of(n, struct module_attribute, attr);
-#define to_module_kobject(n) container_of(n, struct module_kobject, kobj);
+#define to_module_attr(n) container_of(n, struct module_attribute, attr)
+#define to_module_kobject(n) container_of(n, struct module_kobject, kobj)
+
+const struct attribute_group *ksplice_param_grp(struct module *mod)
+{
+	return &mod->param_attrs->grp;
+}
+EXPORT_SYMBOL_GPL(ksplice_param_grp);
+
+struct attribute *ksplice_param_attr(struct module *mod,
+				     const struct kernel_param *param)
+{
+	struct attribute *const *attr;
+	for (attr = mod->param_attrs->grp.attrs; *attr != NULL; attr++) {
+		if (to_param_attr(to_module_attr(*attr))->param == param)
+			return *attr;
+	}
+	return NULL;
+}
+EXPORT_SYMBOL_GPL(ksplice_param_attr);
 
 static ssize_t module_attr_show(struct kobject *kobj,
 				struct attribute *attr,
