mirror of
https://github.com/topjohnwu/Magisk.git
synced 2025-02-25 13:27:25 +00:00
Fix segfault while patching dtb
This commit is contained in:
parent
d8bb3af06b
commit
2f79d0c3b3
@ -78,8 +78,17 @@ static void dtb_patch(const char *file, int patch) {
|
|||||||
fdt_for_each_subnode(block, fdt, fstab) {
|
fdt_for_each_subnode(block, fdt, fstab) {
|
||||||
fprintf(stderr, "Found block [%s] in fstab\n", fdt_get_name(fdt, block, NULL));
|
fprintf(stderr, "Found block [%s] in fstab\n", fdt_get_name(fdt, block, NULL));
|
||||||
uint32_t value_size;
|
uint32_t value_size;
|
||||||
void *value = (char *) fdt_getprop(fdt, block, "fsmgr_flags", &value_size);
|
void *value = (void *) fdt_getprop(fdt, block, "fsmgr_flags", &value_size);
|
||||||
found |= patch_verity(&value, &value_size, patch);
|
if (patch) {
|
||||||
|
void *dup = xmalloc(value_size);
|
||||||
|
memcpy(dup, value, value_size);
|
||||||
|
memset(value, 0, value_size);
|
||||||
|
found |= patch_verity(&dup, &value_size, 1);
|
||||||
|
memcpy(value, dup, value_size);
|
||||||
|
free(dup);
|
||||||
|
} else {
|
||||||
|
found |= patch_verity(&value, &value_size, 0);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -72,8 +72,10 @@ int patch_verity(void **buf, uint32_t *size, int patch) {
|
|||||||
if (patch)
|
if (patch)
|
||||||
patched[write] = src[read];
|
patched[write] = src[read];
|
||||||
}
|
}
|
||||||
free(*buf);
|
if (patch) {
|
||||||
*buf = patched;
|
free(*buf);
|
||||||
|
*buf = patched;
|
||||||
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user