Re: [PATCH v4] mmc: core: allow detection of locked cards

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 2024-06-20 14:38, Ulf Hansson wrote:
On Thu, 6 Jun 2024 at 15:12, <linux-mmc@xxxxxxxxx> wrote:

From: Daniel Kucera <linux-mmc@xxxxxxxxx>

Locked SD card will not reply to SEND_SCR or SD_STATUS commands
so it was failing to initialize previously. When skipped,
the card will get initialized and CMD42 can be sent using
ioctl to unlock the card or remove password protection.
For eMMC, this is not necessary because all initialization
commands are allowed in locked state.
Until unlocked, all read/write calls will timeout.

Skipping the commands above, only means the card gets partially
initialized.

Correct, but it's an improvement in comparison to current state.

Leaving a card in that state seems fragile.

Fragile in what sense? Nothing can happen to the card as it is locked.

What will
happen to upper block layers and filesystems when trying to access it?

Everything will simply time-out.


Several years ago Al Cooper made an attempt [1] to manage the
unlocking of the card during initialization, by finding the password
through the "keys" subsystem. The series didn't really make it to the
upstream kernel, but overall the approach seemed to make sense to me.
It should allow us to complete the initialization of the card inside
the kernel and prevent unnecessary complexity for userspace to manage.

Yes, he did a great work but obviously no-one got too excited to review/merge
his work. His solution was complex.

Mine targets the smallest change possible to make it work at least.
I wanted to avoid a solution that would be hard to test, review and maintain.
Especially when there is only a small interest in the feature.

Perhaps you can have a closer look at that series and see if it's
possible to update it?

I don't think I have the skills to revive his work.


Kind regards
Uffe

BR
Daniel


[1]
https://lore.kernel.org/linux-mmc/1433526147-25941-1-git-send-email-alcooperx@xxxxxxxxx/


Signed-off-by: Daniel Kucera <linux-mmc@xxxxxxxxx>
---
 drivers/mmc/core/sd.c | 13 ++++++++++++-
 1 file changed, 12 insertions(+), 1 deletion(-)

diff --git a/drivers/mmc/core/sd.c b/drivers/mmc/core/sd.c
index 1c8148cdd..ae821df7d 100644
--- a/drivers/mmc/core/sd.c
+++ b/drivers/mmc/core/sd.c
@@ -928,8 +928,19 @@ int mmc_sd_setup_card(struct mmc_host *host, struct mmc_card *card,
        bool reinit)
 {
        int err;
+       u32 card_status;

-       if (!reinit) {
+       err = mmc_send_status(card, &card_status);
+       if (err){
+ pr_err("%s: unable to get card status\n", mmc_hostname(host));
+               return err;
+       }
+
+       if (card_status & R1_CARD_IS_LOCKED){
+               pr_warn("%s: card is locked\n", mmc_hostname(host));
+       }
+
+       if (!reinit && !(card_status & R1_CARD_IS_LOCKED)) {
                /*
                 * Fetch SCR from card.
                 */
--
2.34.1





[Index of Archives]     [Linux Memonry Technology]     [Linux USB Devel]     [Linux Media]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux