Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1757019AbbEVIcL (ORCPT ); Fri, 22 May 2015 04:32:11 -0400 Received: from mailout2.w1.samsung.com ([210.118.77.12]:52518 "EHLO mailout2.w1.samsung.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1756993AbbEVIcF (ORCPT ); Fri, 22 May 2015 04:32:05 -0400 X-AuditID: cbfec7f4-f79c56d0000012ee-02-555ee9828962 From: Marcin Jabrzyk To: minchan@kernel.org, ngupta@vflare.org, sergey.senozhatsky.work@gmail.com, linux-kernel@vger.kernel.org, linux-mm@kvack.org Cc: kyungmin.park@samsung.com, Marcin Jabrzyk Subject: [PATCH] zram: check compressor name before setting it Date: Fri, 22 May 2015 10:31:55 +0200 Message-id: <1432283515-2005-1-git-send-email-m.jabrzyk@samsung.com> X-Mailer: git-send-email 1.9.1 X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFmpgluLIzCtJLcpLzFFi42I5/e/4Vd2ml3GhBhNX6licbXrDbnF51xw2 i3tr/rNaTDvfzWix7Ot7dosNLbPYLR5NmMTkwO6xc9Zddo9NqzrZPDZ9msTu0bdlFaPHzk+b WT0+b5ILYIvisklJzcksSy3St0vgymg/FF3QJFqx70gHcwPjdsEuRk4OCQETiRt/5zFC2GIS F+6tZ+ti5OIQEljKKPH82lN2CKeRSWLWx7tAVRwcbAI6EudXa4DERQQaGCXWnT7OAtLNLOAq MefofVYQW1jATuLWmUfsIDaLgKrE5pMdYDW8Ai4SU98uZYHYJidx8thk1gmM3AsYGVYxiqaW JhcUJ6XnGuoVJ+YWl+al6yXn525ihITLlx2Mi49ZHWIU4GBU4uE1OBgXKsSaWFZcmXuIUYKD WUmEV+YmUIg3JbGyKrUoP76oNCe1+BCjNAeLkjjv3F3vQ4QE0hNLUrNTUwtSi2CyTBycUg2M Vgfi7v6w6jl1Z/uJOUvszAWWqMS+jr3Uv/K1TOzGtFKjuNmF7hVGIUstFB+E/thZaR1rx/f0 JWfhr17p9q333y3T4L2dcCMiXitFyurW19z/surbpYW8clpWHkhf8Ld179xZqt/K92gWPC4y 4J76+mqHvJ/Wu0mepZvTdl68b39W8rLHlKDZSizFGYmGWsxFxYkA5bQJQRMCAAA= Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 2844 Lines: 96 Zram sysfs interface was not making any check of proper compressor name when setting it. Any name is accepted, but further tries of device creation would end up with not very meaningfull error. eg. echo lz0 > comp_algorithm echo 200M > disksize echo: write error: Invalid argument This commit fixes that behaviour with returning EINVAL and proper error message. Signed-off-by: Marcin Jabrzyk --- drivers/block/zram/zcomp.c | 22 +++++++++++----------- drivers/block/zram/zcomp.h | 1 + drivers/block/zram/zram_drv.c | 5 +++++ 3 files changed, 17 insertions(+), 11 deletions(-) diff --git a/drivers/block/zram/zcomp.c b/drivers/block/zram/zcomp.c index f1ff39a3d1c1..f81a2b5fef43 100644 --- a/drivers/block/zram/zcomp.c +++ b/drivers/block/zram/zcomp.c @@ -51,17 +51,6 @@ static struct zcomp_backend *backends[] = { NULL }; -static struct zcomp_backend *find_backend(const char *compress) -{ - int i = 0; - while (backends[i]) { - if (sysfs_streq(compress, backends[i]->name)) - break; - i++; - } - return backends[i]; -} - static void zcomp_strm_free(struct zcomp *comp, struct zcomp_strm *zstrm) { if (zstrm->private) @@ -267,6 +256,17 @@ static int zcomp_strm_single_create(struct zcomp *comp) return 0; } +struct zcomp_backend *find_backend(const char *compress) +{ + int i = 0; + while (backends[i]) { + if (sysfs_streq(compress, backends[i]->name)) + break; + i++; + } + return backends[i]; +} + /* show available compressors */ ssize_t zcomp_available_show(const char *comp, char *buf) { diff --git a/drivers/block/zram/zcomp.h b/drivers/block/zram/zcomp.h index c59d1fca72c0..a531350858d0 100644 --- a/drivers/block/zram/zcomp.h +++ b/drivers/block/zram/zcomp.h @@ -50,6 +50,7 @@ struct zcomp { void (*destroy)(struct zcomp *comp); }; +struct zcomp_backend *find_backend(const char *compress); ssize_t zcomp_available_show(const char *comp, char *buf); struct zcomp *zcomp_create(const char *comp, int max_strm); diff --git a/drivers/block/zram/zram_drv.c b/drivers/block/zram/zram_drv.c index 01ec6945c2a9..ef4acd6e52d1 100644 --- a/drivers/block/zram/zram_drv.c +++ b/drivers/block/zram/zram_drv.c @@ -268,6 +268,11 @@ static ssize_t comp_algorithm_store(struct device *dev, { struct zram *zram = dev_to_zram(dev); down_write(&zram->init_lock); + if (!find_backend(buf)) { + up_write(&zram->init_lock); + pr_info("There is no such compression algorithm\n"); + return -EINVAL; + } if (init_done(zram)) { up_write(&zram->init_lock); pr_info("Can't change algorithm for initialized device\n"); -- 1.9.1 -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/