lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [thread-next>] [day] [month] [year] [list]
Date:   Wed,  5 May 2021 21:29:45 -0600
From:   oracleks043021@...il.com
To:     beanhuo@...ron.com, kenny.gibbons@...cle.com,
        kimito.sakata@...cle.com, rkamdar@...ron.com, chris@...ntf.net,
        ulf.hansson@...aro.org, avri.altman@....com
Cc:     linux-mmc@...r.kernel.org, linux-kernel@...r.kernel.org
Subject: [PATCH RESEND v4] Clean up and show effect of ERASE_GROUP_DEF

From: Kimito Sakata <kimito.sakata@...cle.com>

Replaced unused pointer with NULL on calls to strtol().
Added logic to print High Capacity mode parameters of Erase unit size,
Erase Timeout, Write protect Group Size if the EXT_CSD_ERASE_GrOUP_DEF
bit 0 is enabled.

Tested on X86 but the changes should work on all platforms.

Co-developed-by: Bean Huo <beanhuo@...ron.com>
Signed-off-by: Kimito Sakata <kimito.sakata@...cle.com>
Reviewed-by: Kenneth Gibbons <kenny.gibbons@...cle.com>

Changelog:
V3--V4:
    1. Replace unused pointer var with NULL.
    2. Added msg if ERASE_GROUP_DEF enabled for HC.
v2--v3:
    1. Remove redundant ifndef

V1--V2:
    1. refactor Kimito's original patch
    2. change to use MMC_IOC_MULTI_CMD
    3. add checkup if eMMC devie supports secure erase/trim


---
 mmc_cmds.c | 25 ++++++++++++++++++++-----
 1 file changed, 20 insertions(+), 5 deletions(-)

diff --git a/mmc_cmds.c b/mmc_cmds.c
index 3e36ff2..afa85b7 100644
--- a/mmc_cmds.c
+++ b/mmc_cmds.c
@@ -2518,6 +2518,22 @@ static int erase(int dev_fd, __u32 argin, __u32 start, __u32 end)
 {
 	int ret = 0;
 	struct mmc_ioc_multi_cmd *multi_cmd;
+	__u8 ext_csd[512];
+
+
+	ret = read_extcsd(dev_fd, ext_csd);
+	if (ret) {
+		fprintf(stderr, "Could not read EXT_CSD\n");
+		exit(1);
+	}
+	if (ext_csd[EXT_CSD_ERASE_GROUP_DEF] & 0x01) {
+	  fprintf(stderr, "High Capacity Erase Unit Size=%d bytes\n" \
+                          "High Capacity Erase Timeout=%d ms\n" \
+                          "High Capacity Write Protect Group Size=%d bytes\n",
+		           ext_csd[224]*0x80000,
+		           ext_csd[223]*300,
+                           ext_csd[221]*ext_csd[224]*0x80000);
+	}
 
 	multi_cmd = calloc(1, sizeof(struct mmc_ioc_multi_cmd) +
 			   3 * sizeof(struct mmc_ioc_cmd));
@@ -2559,7 +2575,6 @@ int do_erase(int nargs, char **argv)
 {
 	int dev_fd, ret;
 	char *print_str;
-	char **eptr = NULL;
 	__u8 ext_csd[512], checkup_mask = 0;
 	__u32 arg, start, end;
 
@@ -2569,14 +2584,14 @@ int do_erase(int nargs, char **argv)
 	}
 
 	if (strstr(argv[2], "0x") || strstr(argv[2], "0X"))
-		start = strtol(argv[2], eptr, 16);
+		start = strtol(argv[2], NULL, 16);
 	else
-		start = strtol(argv[2], eptr, 10);
+		start = strtol(argv[2], NULL, 10);
 
 	if (strstr(argv[3], "0x") || strstr(argv[3], "0X"))
-		end = strtol(argv[3], eptr, 16);
+		end = strtol(argv[3], NULL, 16);
 	else
-		end = strtol(argv[3], eptr, 10);
+		end = strtol(argv[3], NULL, 10);
 
 	if (end < start) {
 		fprintf(stderr, "erase start [0x%08x] > erase end [0x%08x]\n",
-- 
2.31.1

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ