[Pdbg] [PATCH v3 4/4] libpdbg: Improve the logic to check if fdt is writable
Amitay Isaacs
amitay at ozlabs.org
Wed Mar 4 14:19:13 AEDT 2020
Signed-off-by: Amitay Isaacs <amitay at ozlabs.org>
---
libpdbg/device.c | 2 +-
libpdbg/dtb.c | 24 +++++++++---------------
libpdbg/target.h | 3 ++-
3 files changed, 12 insertions(+), 17 deletions(-)
diff --git a/libpdbg/device.c b/libpdbg/device.c
index cd8a459..604cddb 100644
--- a/libpdbg/device.c
+++ b/libpdbg/device.c
@@ -355,7 +355,7 @@ bool pdbg_target_set_property(struct pdbg_target *target, const char *name, cons
if (!p)
return false;
- if (!target->fdt || !pdbg_fdt_is_writeable(target->fdt))
+ if (!target->fdt || pdbg_fdt_is_readonly(target->fdt))
return false;
if (len != size)
diff --git a/libpdbg/dtb.c b/libpdbg/dtb.c
index 57502c1..35923b0 100644
--- a/libpdbg/dtb.c
+++ b/libpdbg/dtb.c
@@ -63,10 +63,12 @@ static struct pdbg_dtb pdbg_dtb = {
.backend = {
.fd = -1,
.len = -1,
+ .readonly = true,
},
.system = {
.fd = -1,
.len = -1,
+ .readonly = true,
},
};
@@ -270,6 +272,7 @@ static void mmap_dtb(char *file, bool readonly, struct pdbg_mfile *mfile)
.fd = fd,
.len = statbuf.st_size,
.fdt = dtb,
+ .readonly = readonly,
};
return;
@@ -408,24 +411,15 @@ done:
return dtb;
}
-static bool is_fdt_mapped(void *fdt, struct pdbg_mfile *mfile)
+bool pdbg_fdt_is_readonly(void *fdt)
{
- if (mfile->fdt == fdt && mfile->fd != -1 && mfile->len != -1) {
- return true;
- }
-
- return false;
-}
+ if (pdbg_dtb.system.fdt == fdt)
+ return pdbg_dtb.system.readonly;
-bool pdbg_fdt_is_writeable(void *fdt)
-{
- bool ok;
-
- ok = is_fdt_mapped(fdt, &pdbg_dtb.system);
- if (!ok)
- ok = is_fdt_mapped(fdt, &pdbg_dtb.backend);
+ if (pdbg_dtb.backend.fdt == fdt)
+ return pdbg_dtb.backend.readonly;
- return ok;
+ return true;
}
static void close_dtb(struct pdbg_mfile *mfile)
diff --git a/libpdbg/target.h b/libpdbg/target.h
index fffdc49..3b74844 100644
--- a/libpdbg/target.h
+++ b/libpdbg/target.h
@@ -60,6 +60,7 @@ struct pdbg_mfile {
int fd;
ssize_t len;
void *fdt;
+ bool readonly;
};
struct pdbg_dtb {
@@ -80,7 +81,7 @@ extern struct list_head target_classes;
struct pdbg_dtb *pdbg_default_dtb(void *system_fdt);
const char *pdbg_get_backend_option(void);
-bool pdbg_fdt_is_writeable(void *fdt);
+bool pdbg_fdt_is_readonly(void *fdt);
struct chipop *pib_to_chipop(struct pdbg_target *target);
bool target_is_virtual(struct pdbg_target *target);
--
2.24.1
More information about the Pdbg
mailing list