Fixed reference to overlapping (the same) string.
The intent of the rootdev_get_device_slave is to allow the slave and
the device to be the same string but it is not required. Added a
test for the case where they are the same string to not do the
strncpy.
Linux has vixed the problem of a limited number of stacked devices,
so I fixed the comment that referred to it.
BUG=chromium:259893
TEST=rootdev -s
Change-Id: I04d84799e77c678f1330e1bcf72cddaf9ac68c4c
Reviewed-on: https://gerrit.chromium.org/gerrit/61707
Tested-by: Paul Taysom <taysom@chromium.org>
Reviewed-by: Yunlian Jiang <yunlian@chromium.org>
Commit-Queue: Paul Taysom <taysom@chromium.org>
diff --git a/rootdev.c b/rootdev.c
index 5ef0c3d..ee877c0 100644
--- a/rootdev.c
+++ b/rootdev.c
@@ -22,9 +22,9 @@
#include <unistd.h>
/*
- * A depth of more than about 4 slave devices
- * will run out of kernel stack space, so setting
- * the serach depth to 8 covers all possible cases.
+ * Limit prevents endless looping to find slave.
+ * We currently have at most 2 levels, this allows
+ * for future growth.
*/
#define MAX_SLAVE_DEPTH 8
@@ -283,7 +283,8 @@
* and find the last device. For example, verity can be stacked on bootcache
* that is stacked on a disk partition.
*/
- strncpy(slave, device, size);
+ if (slave != device)
+ strncpy(slave, device, size);
slave[size - 1] = '\0';
for (i = 0; i < MAX_SLAVE_DEPTH; i++) {
len = snprintf(dst, sizeof(dst), "%s/%s/slaves", search, slave);