|
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 |
|