Message ID | 20210817013643.13061-3-digetx@gmail.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | Support EFI partition on NVIDIA Tegra devices | expand |
On Tue, Aug 17, 2021 at 04:36:42AM +0300, Dmitry Osipenko wrote: > + if (bdev->bd_disk->major != MMC_BLOCK_MAJOR) > + return NULL; The major is a dangerous check as we have all kinds of ways to override it. Please check the block device operations as they must be unique.
17.08.2021 07:37, Christoph Hellwig пишет: > On Tue, Aug 17, 2021 at 04:36:42AM +0300, Dmitry Osipenko wrote: >> + if (bdev->bd_disk->major != MMC_BLOCK_MAJOR) >> + return NULL; > > The major is a dangerous check as we have all kinds of ways to override > it. Please check the block device operations as they must be unique. > Alright, thank you for the suggestion.
diff --git a/drivers/mmc/core/block.c b/drivers/mmc/core/block.c index 672cc505ce37..7e9a486073fd 100644 --- a/drivers/mmc/core/block.c +++ b/drivers/mmc/core/block.c @@ -42,6 +42,7 @@ #include <linux/debugfs.h> #include <linux/mmc/ioctl.h> +#include <linux/mmc/blkdev.h> #include <linux/mmc/card.h> #include <linux/mmc/host.h> #include <linux/mmc/mmc.h> @@ -357,6 +358,20 @@ static const struct attribute_group *mmc_disk_attr_groups[] = { NULL, }; +struct mmc_card *mmc_bdev_to_card(struct block_device *bdev) +{ + struct mmc_blk_data *md; + + if (bdev->bd_disk->major != MMC_BLOCK_MAJOR) + return NULL; + + md = mmc_blk_get(bdev->bd_disk); + if (!md) + return NULL; + + return md->queue.card; +} + static int mmc_blk_open(struct block_device *bdev, fmode_t mode) { struct mmc_blk_data *md = mmc_blk_get(bdev->bd_disk); diff --git a/include/linux/mmc/blkdev.h b/include/linux/mmc/blkdev.h new file mode 100644 index 000000000000..67608c58de70 --- /dev/null +++ b/include/linux/mmc/blkdev.h @@ -0,0 +1,13 @@ +/* SPDX-License-Identifier: GPL-2.0-only */ +/* + * linux/include/linux/mmc/blkdev.h + */ +#ifndef LINUX_MMC_BLOCK_DEVICE_H +#define LINUX_MMC_BLOCK_DEVICE_H + +struct block_device; +struct mmc_card; + +struct mmc_card *mmc_bdev_to_card(struct block_device *bdev); + +#endif /* LINUX_MMC_BLOCK_DEVICE_H */
Add mmc_bdev_to_card() helper which is needed for checking EMMC parameters by partition table parser in order to find EFI entry on NVIDIA Tegra devices. Signed-off-by: Dmitry Osipenko <digetx@gmail.com> --- drivers/mmc/core/block.c | 15 +++++++++++++++ include/linux/mmc/blkdev.h | 13 +++++++++++++ 2 files changed, 28 insertions(+) create mode 100644 include/linux/mmc/blkdev.h