Takashi Iwai 01cabd
From 1e97743fd180981bef5f01402342bb54bf1c6366 Mon Sep 17 00:00:00 2001
Takashi Iwai 01cabd
From: Michael Walle <michael@walle.cc>
Takashi Iwai 01cabd
Date: Wed, 3 Mar 2021 16:57:35 +0100
Takashi Iwai 01cabd
Subject: [PATCH] mtd: require write permissions for locking and badblock ioctls
Takashi Iwai 01cabd
Mime-version: 1.0
Takashi Iwai 01cabd
Content-type: text/plain; charset=UTF-8
Takashi Iwai 01cabd
Content-transfer-encoding: 8bit
Takashi Iwai 01cabd
Git-commit: 1e97743fd180981bef5f01402342bb54bf1c6366
Takashi Iwai 01cabd
Patch-mainline: v5.13-rc1
Takashi Iwai 01cabd
References: git-fixes
Takashi Iwai 01cabd
Takashi Iwai 01cabd
MEMLOCK, MEMUNLOCK and OTPLOCK modify protection bits. Thus require
Takashi Iwai 01cabd
write permission. Depending on the hardware MEMLOCK might even be
Takashi Iwai 01cabd
write-once, e.g. for SPI-NOR flashes with their WP# tied to GND. OTPLOCK
Takashi Iwai 01cabd
is always write-once.
Takashi Iwai 01cabd
Takashi Iwai 01cabd
MEMSETBADBLOCK modifies the bad block table.
Takashi Iwai 01cabd
Takashi Iwai 01cabd
Fixes: f7e6b19bc764 ("mtd: properly check all write ioctls for permissions")
Takashi Iwai 01cabd
Signed-off-by: Michael Walle <michael@walle.cc>
Takashi Iwai 01cabd
Reviewed-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Takashi Iwai 01cabd
Acked-by: Rafał Miłecki <rafal@milecki.pl>
Takashi Iwai 01cabd
Acked-by: Richard Weinberger <richard@nod.at>
Takashi Iwai 01cabd
Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
Takashi Iwai 01cabd
Link: https://lore.kernel.org/linux-mtd/20210303155735.25887-1-michael@walle.cc
Takashi Iwai 01cabd
Acked-by: Takashi Iwai <tiwai@suse.de>
Takashi Iwai 01cabd
Takashi Iwai 01cabd
---
Takashi Iwai 01cabd
 drivers/mtd/mtdchar.c | 8 ++++----
Takashi Iwai 01cabd
 1 file changed, 4 insertions(+), 4 deletions(-)
Takashi Iwai 01cabd
Takashi Iwai 01cabd
diff --git a/drivers/mtd/mtdchar.c b/drivers/mtd/mtdchar.c
Takashi Iwai 01cabd
index 998d86f46488..870f7a19ad9d 100644
Takashi Iwai 01cabd
--- a/drivers/mtd/mtdchar.c
Takashi Iwai 01cabd
+++ b/drivers/mtd/mtdchar.c
Takashi Iwai 01cabd
@@ -643,16 +643,12 @@ static int mtdchar_ioctl(struct file *file, u_int cmd, u_long arg)
Takashi Iwai 01cabd
 	case MEMGETINFO:
Takashi Iwai 01cabd
 	case MEMREADOOB:
Takashi Iwai 01cabd
 	case MEMREADOOB64:
Takashi Iwai 01cabd
-	case MEMLOCK:
Takashi Iwai 01cabd
-	case MEMUNLOCK:
Takashi Iwai 01cabd
 	case MEMISLOCKED:
Takashi Iwai 01cabd
 	case MEMGETOOBSEL:
Takashi Iwai 01cabd
 	case MEMGETBADBLOCK:
Takashi Iwai 01cabd
-	case MEMSETBADBLOCK:
Takashi Iwai 01cabd
 	case OTPSELECT:
Takashi Iwai 01cabd
 	case OTPGETREGIONCOUNT:
Takashi Iwai 01cabd
 	case OTPGETREGIONINFO:
Takashi Iwai 01cabd
-	case OTPLOCK:
Takashi Iwai 01cabd
 	case ECCGETLAYOUT:
Takashi Iwai 01cabd
 	case ECCGETSTATS:
Takashi Iwai 01cabd
 	case MTDFILEMODE:
Takashi Iwai 01cabd
@@ -663,9 +659,13 @@ static int mtdchar_ioctl(struct file *file, u_int cmd, u_long arg)
Takashi Iwai 01cabd
 	/* "dangerous" commands */
Takashi Iwai 01cabd
 	case MEMERASE:
Takashi Iwai 01cabd
 	case MEMERASE64:
Takashi Iwai 01cabd
+	case MEMLOCK:
Takashi Iwai 01cabd
+	case MEMUNLOCK:
Takashi Iwai 01cabd
+	case MEMSETBADBLOCK:
Takashi Iwai 01cabd
 	case MEMWRITEOOB:
Takashi Iwai 01cabd
 	case MEMWRITEOOB64:
Takashi Iwai 01cabd
 	case MEMWRITE:
Takashi Iwai 01cabd
+	case OTPLOCK:
Takashi Iwai 01cabd
 		if (!(file->f_mode & FMODE_WRITE))
Takashi Iwai 01cabd
 			return -EPERM;
Takashi Iwai 01cabd
 		break;
Takashi Iwai 01cabd
-- 
Takashi Iwai 01cabd
2.26.2
Takashi Iwai 01cabd