From 75964d17e31985d2c85321b6b77f35eb052117cb Mon Sep 17 00:00:00 2001 From: ChenJie Date: Mon, 13 Jun 2022 21:52:28 +0800 Subject: [PATCH 1/4] allow memmgr and root user to write enable node Signed-off-by: ChenJie --- drivers/hyperhold/hp_core.c | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/drivers/hyperhold/hp_core.c b/drivers/hyperhold/hp_core.c index a55ee05f3fe6..b2ca367bd5fc 100644 --- a/drivers/hyperhold/hp_core.c +++ b/drivers/hyperhold/hp_core.c @@ -136,12 +136,24 @@ EXPORT_SYMBOL(hyperhold_enable); static int enable_sysctl_handler(struct ctl_table *table, int write, void *buffer, size_t *lenp, loff_t *ppos) { + struct cred *cred; + char *filter_buf; + filter_buf = strstrip((char *)buffer); if (write) { - if (!strcmp(buffer, "enable\n")) + rcu_read_lock(); + cred = current_cred(); + if (!uid_eq(cred->euid, GLOBAL_MEMMGR_UID) && + !uid_eq(cred->euid, GLOBAL_ROOT_UID)) { + pr_err("chenjie no permission !"); + rcu_read_unlock(); + return 0; + } + rcu_read_unlock(); + if (!strcmp(filter_buf, "enable")) hyperhold_enable(); - else if (!strcmp(buffer, "disable\n")) + else if (!strcmp(filter_buf, "disable")) hyperhold_disable(false); - else if (!strcmp(buffer, "force_disable\n")) + else if (!strcmp(filter_buf, "force_disable")) hyperhold_disable(true); } else { if (*lenp < HP_STATE_LEN || *ppos) { @@ -225,7 +237,7 @@ static struct ctl_table_header *hp_sysctl_header; static struct ctl_table hp_table[] = { { .procname = "enable", - .mode = 0644, + .mode = 0666, .proc_handler = enable_sysctl_handler, }, { -- Gitee From ae23d123f77bd89542fc3e5fc24f9f19359896ab Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=99=88=E6=9D=B0?= Date: Mon, 20 Jun 2022 13:56:18 +0000 Subject: [PATCH 2/4] update drivers/hyperhold/hp_core.c. Signed-off-by: ChenJie --- drivers/hyperhold/hp_core.c | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/drivers/hyperhold/hp_core.c b/drivers/hyperhold/hp_core.c index b2ca367bd5fc..4a3753e3af8f 100644 --- a/drivers/hyperhold/hp_core.c +++ b/drivers/hyperhold/hp_core.c @@ -136,19 +136,15 @@ EXPORT_SYMBOL(hyperhold_enable); static int enable_sysctl_handler(struct ctl_table *table, int write, void *buffer, size_t *lenp, loff_t *ppos) { - struct cred *cred; + struct cred *cred = current_cred(); char *filter_buf; filter_buf = strstrip((char *)buffer); if (write) { - rcu_read_lock(); - cred = current_cred(); if (!uid_eq(cred->euid, GLOBAL_MEMMGR_UID) && !uid_eq(cred->euid, GLOBAL_ROOT_UID)) { - pr_err("chenjie no permission !"); - rcu_read_unlock(); + pr_err("no permission to enable/disable eswap! \n"); return 0; } - rcu_read_unlock(); if (!strcmp(filter_buf, "enable")) hyperhold_enable(); else if (!strcmp(filter_buf, "disable")) -- Gitee From 7691678c08eb7d5a7a0cc5f7886147e36d7cd5be Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=99=88=E6=9D=B0?= Date: Fri, 24 Jun 2022 01:25:26 +0000 Subject: [PATCH 3/4] update drivers/hyperhold/hp_core.c. Signed-off-by: ChenJie --- drivers/hyperhold/hp_core.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/hyperhold/hp_core.c b/drivers/hyperhold/hp_core.c index 4a3753e3af8f..486e1513ed4e 100644 --- a/drivers/hyperhold/hp_core.c +++ b/drivers/hyperhold/hp_core.c @@ -136,7 +136,7 @@ EXPORT_SYMBOL(hyperhold_enable); static int enable_sysctl_handler(struct ctl_table *table, int write, void *buffer, size_t *lenp, loff_t *ppos) { - struct cred *cred = current_cred(); + const struct cred *cred = current_cred(); char *filter_buf; filter_buf = strstrip((char *)buffer); if (write) { -- Gitee From ee70b1f3f1a7f2d13fd2daf8976694de9dc6e2d9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=99=88=E6=9D=B0?= Date: Fri, 24 Jun 2022 02:25:47 +0000 Subject: [PATCH 4/4] clean code style warning Signed-off-by: ChenJie --- drivers/hyperhold/hp_core.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/drivers/hyperhold/hp_core.c b/drivers/hyperhold/hp_core.c index 486e1513ed4e..bb844857c7c3 100644 --- a/drivers/hyperhold/hp_core.c +++ b/drivers/hyperhold/hp_core.c @@ -138,11 +138,12 @@ static int enable_sysctl_handler(struct ctl_table *table, int write, { const struct cred *cred = current_cred(); char *filter_buf; + filter_buf = strstrip((char *)buffer); if (write) { if (!uid_eq(cred->euid, GLOBAL_MEMMGR_UID) && !uid_eq(cred->euid, GLOBAL_ROOT_UID)) { - pr_err("no permission to enable/disable eswap! \n"); + pr_err("no permission to enable/disable eswap!\n"); return 0; } if (!strcmp(filter_buf, "enable")) -- Gitee