Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > linux.kernel > #1358067 > unrolled thread

[PATCH] mmc: block: remove the check for whole block device for ioctl.

Started by"Yin, Fengwei" <fengwei.yin@linaro.org>
First post2016-03-15 15:30 +0100
Last post2016-03-16 14:50 +0100
Articles 4 — 3 participants

Back to article view | Back to linux.kernel


Contents

  [PATCH] mmc: block: remove the check for whole block device for ioctl. "Yin, Fengwei" <fengwei.yin@linaro.org> - 2016-03-15 15:30 +0100
    Re: [PATCH] mmc: block: remove the check for whole block device for  ioctl. Christoph Hellwig <hch@infradead.org> - 2016-03-15 15:40 +0100
      Re: [PATCH] mmc: block: remove the check for whole block device for  ioctl. "fengwei.yin" <fengwei.yin@linaro.org> - 2016-03-16 00:50 +0100
        Re: [PATCH] mmc: block: remove the check for whole block device for  ioctl. "fengwei.yin" <fengwei.yin@linaro.org> - 2016-03-16 14:50 +0100

#1358067 — [PATCH] mmc: block: remove the check for whole block device for ioctl.

From"Yin, Fengwei" <fengwei.yin@linaro.org>
Date2016-03-15 15:30 +0100
Subject[PATCH] mmc: block: remove the check for whole block device for ioctl.
Message-ID<rcY8W-3eT-11@gated-at.bofh.it>
From: Fengwei Yin <fengwei.yin@linaro.org>

a5f5774c55a2e3ed75f4d6c5556b7bfcb726e6f0 introduced the whole block
device checking for MMC_IOC_CMD while the old code has no such check.

It breaks some ioctl call like BLKROSET from user space. An example
is "adb remount" cmd. It prints out following error message:
"remount of /system failed; couldn't make block device XXXX writable: \
Operation not permitted."
while the command worked fine.

This change move the whole block device checking only for MMC_IOC_MULTI_CMD.

Signed-off-by: Fengwei Yin <fengwei.yin@linaro.org>
---
 drivers/mmc/card/block.c | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

diff --git a/drivers/mmc/card/block.c b/drivers/mmc/card/block.c
index fe207e5..72b9053 100644
--- a/drivers/mmc/card/block.c
+++ b/drivers/mmc/card/block.c
@@ -693,7 +693,7 @@ static int mmc_blk_ioctl(struct block_device *bdev, fmode_t mode,
 	 * whole block device, not on a partition.  This prevents overspray
 	 * between sibling partitions.
 	 */
-	if ((!capable(CAP_SYS_RAWIO)) || (bdev != bdev->bd_contains))
+	if (!capable(CAP_SYS_RAWIO))
 		return -EPERM;
 
 	switch (cmd) {
@@ -701,6 +701,9 @@ static int mmc_blk_ioctl(struct block_device *bdev, fmode_t mode,
 		return mmc_blk_ioctl_cmd(bdev,
 				(struct mmc_ioc_cmd __user *)arg);
 	case MMC_IOC_MULTI_CMD:
+        if (bdev != bdev->bd_contains)
+            return -EPERM;
+
 		return mmc_blk_ioctl_multi_cmd(bdev,
 				(struct mmc_ioc_multi_cmd __user *)arg);
 	default:
-- 
2.1.4

[toc] | [next] | [standalone]


#1358076 — Re: [PATCH] mmc: block: remove the check for whole block device for ioctl.

FromChristoph Hellwig <hch@infradead.org>
Date2016-03-15 15:40 +0100
SubjectRe: [PATCH] mmc: block: remove the check for whole block device for ioctl.
Message-ID<rcYiC-3jk-23@gated-at.bofh.it>
In reply to#1358067
On Tue, Mar 15, 2016 at 11:26:07AM -0400, Yin, Fengwei wrote:
> From: Fengwei Yin <fengwei.yin@linaro.org>
> 
> a5f5774c55a2e3ed75f4d6c5556b7bfcb726e6f0 introduced the whole block
> device checking for MMC_IOC_CMD while the old code has no such check.
> 
> It breaks some ioctl call like BLKROSET from user space. An example
> is "adb remount" cmd. It prints out following error message:
> "remount of /system failed; couldn't make block device XXXX writable: \
> Operation not permitted."
> while the command worked fine.
> 
> This change move the whole block device checking only for MMC_IOC_MULTI_CMD.

I think mmc_blk_ioctl_cmd will need this as well, as will probably
do any new ioctl.

So I think the right fix is to simply return -EINVAL instead of
EPERM if on a partition, which will make all the block layer ioctls
works fine.

[toc] | [prev] | [next] | [standalone]


#1358395 — Re: [PATCH] mmc: block: remove the check for whole block device for ioctl.

From"fengwei.yin" <fengwei.yin@linaro.org>
Date2016-03-16 00:50 +0100
SubjectRe: [PATCH] mmc: block: remove the check for whole block device for ioctl.
Message-ID<rd6ST-Ip-41@gated-at.bofh.it>
In reply to#1358076

On 2016/3/15 22:31, Christoph Hellwig wrote:
> On Tue, Mar 15, 2016 at 11:26:07AM -0400, Yin, Fengwei wrote:
>> From: Fengwei Yin <fengwei.yin@linaro.org>
>>
>> a5f5774c55a2e3ed75f4d6c5556b7bfcb726e6f0 introduced the whole block
>> device checking for MMC_IOC_CMD while the old code has no such check.
>>
>> It breaks some ioctl call like BLKROSET from user space. An example
>> is "adb remount" cmd. It prints out following error message:
>> "remount of /system failed; couldn't make block device XXXX writable: \
>> Operation not permitted."
>> while the command worked fine.
>>
>> This change move the whole block device checking only for MMC_IOC_MULTI_CMD.
>
> I think mmc_blk_ioctl_cmd will need this as well, as will probably
> do any new ioctl.
>
> So I think the right fix is to simply return -EINVAL instead of
> EPERM if on a partition, which will make all the block layer ioctls
> works fine.
Fair enough.

I will wait for one more day for further comments to the patch. And update
the patch tomorrow. Thanks a lot for looking into the patch.

Regards
Yin, Fengwei

>

[toc] | [prev] | [next] | [standalone]


#1358997 — Re: [PATCH] mmc: block: remove the check for whole block device for ioctl.

From"fengwei.yin" <fengwei.yin@linaro.org>
Date2016-03-16 14:50 +0100
SubjectRe: [PATCH] mmc: block: remove the check for whole block device for ioctl.
Message-ID<rdjZM-1bV-1@gated-at.bofh.it>
In reply to#1358395

On 2016/3/16 19:48, Jon Hunter wrote:
>
> On 15/03/16 23:44, fengwei.yin wrote:
>>
>>
>> On 2016/3/15 22:31, Christoph Hellwig wrote:
>>> On Tue, Mar 15, 2016 at 11:26:07AM -0400, Yin, Fengwei wrote:
>>>> From: Fengwei Yin <fengwei.yin@linaro.org>
>>>>
>>>> a5f5774c55a2e3ed75f4d6c5556b7bfcb726e6f0 introduced the whole block
>>>> device checking for MMC_IOC_CMD while the old code has no such check.
>>>>
>>>> It breaks some ioctl call like BLKROSET from user space. An example
>>>> is "adb remount" cmd. It prints out following error message:
>>>> "remount of /system failed; couldn't make block device XXXX writable: \
>>>> Operation not permitted."
>>>> while the command worked fine.
>>>>
>>>> This change move the whole block device checking only for
>>>> MMC_IOC_MULTI_CMD.
>>>
>>> I think mmc_blk_ioctl_cmd will need this as well, as will probably
>>> do any new ioctl.
>>>
>>> So I think the right fix is to simply return -EINVAL instead of
>>> EPERM if on a partition, which will make all the block layer ioctls
>>> works fine.
>> Fair enough.
>>
>> I will wait for one more day for further comments to the patch. And update
>> the patch tomorrow. Thanks a lot for looking into the patch.
>
> There is already a patch in the works for this [0].
>
> Cheers
> Jon
>
> [0] http://marc.info/?l=linux-mmc&m=145812340114153&w=2

Thanks a lot for the information. I will drop my patch.

Regards
Yin, Fengwei

>

[toc] | [prev] | [standalone]


Back to top | Article view | linux.kernel


csiph-web