Mounting the EFS on your local computer can result in user id
and permissions mismatch because the /etc/fstab doesn't always
match the user ids used by Android.

For instance here's the GT-N7000 EFS on my laptop:
    $ ls -l [...]/nv_data.bin
    -rwx------ 1 1001 1001 2097152  1 janv.  2000 [...]/nv_data.bin

When using nv_data-md5 on it we have:
    $ ./tools/nv_data-md5 [...]/nv_data.bin
    [ipc] file_data_read: Error: fd: -1
    [ipc] ipc_nv_data_md5_calculate failed: data is NULL
    Calculating nv_data backup md5 failed

The error was too cryptic, and I ended up having to dig into the source
code to understand what was going on.

With this patch we now have an error message that is easier to understand:
    $ ./tools/nv_data-md5 [...]/nv_data.bin
    [ipc] file_data_read open failed with error 13: Permission denied
    [ipc] ipc_nv_data_md5_calculate failed: data is NULL
    Calculating nv_data backup md5 failed

Signed-off-by: Denis 'GNUtoo' Carikli <[email protected]>
---
 samsung-ipc/utils.c | 10 +++++++---
 1 file changed, 7 insertions(+), 3 deletions(-)

diff --git a/samsung-ipc/utils.c b/samsung-ipc/utils.c
index c92fc36..7a84764 100644
--- a/samsung-ipc/utils.c
+++ b/samsung-ipc/utils.c
@@ -18,6 +18,7 @@
  */
 
 #include <ctype.h>
+#include <errno.h>
 #include <fcntl.h>
 #include <stdint.h>
 #include <stdio.h>
@@ -68,7 +69,9 @@ void *file_data_read(struct ipc_client *client, const char 
*path, size_t size,
 
        fd = open(path, O_RDONLY);
        if (fd < 0) {
-               ipc_client_log(client, "%s: Error: fd: %d ", __func__, fd);
+               rc = errno;
+               ipc_client_log(client, "%s open failed with error %d: %s", 
__func__, rc,
+                              strerror(rc));
                goto error;
        }
 
@@ -145,8 +148,9 @@ int file_data_write(struct ipc_client *client, const char 
*path,
 
        fd = open(path, O_WRONLY | O_CREAT, 0644);
        if (fd < 0) {
-               ipc_client_log(client, "%s: open failed with error %d",
-                              __func__, fd);
+               rc = errno;
+               ipc_client_log(client, "%s open failed with error %d: %s",
+                              __func__, rc, strerror(rc));
                goto error;
        }
 
-- 
2.28.0

_______________________________________________
Replicant mailing list
[email protected]
https://lists.osuosl.org/mailman/listinfo/replicant

Reply via email to