blkmapd: Fix infinite loop when reading serial
Subsystems (2)
PATCH 1/1 blkmapd: Fix infinite loop when reading serial
If (dev_id->ids & 0xf) < current_id, must updates pos when continue. Otherwise an infinite loop.
No other places use the pos value, just move to the top of while.
Signed-off-by Kinglong Mee <[email protected]>
--- utils/blkmapd/device-inq.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-)
utils/blkmapd/device-inq.c +2 -1
@@ -196,6 +196,8 @@ struct bl_serial *bldev_read_serial(int fd, const char *filename)while (pos < (len - devid_len)) { dev_id = (struct bl_dev_id *)&(dev_root->data[pos]); + pos += (dev_id->len + devid_len); +if ((dev_id->ids &0xf ) < current_id)continue ;switch (dev_id->ids &0xf ) {
@@ -226,7 +228,6 @@ struct bl_serial *bldev_read_serial(int fd, const char *filename) }if (current_id ==3 )break ; - pos += (dev_id->len + devid_len); } out:if (!serial_out)
Signature · 1 line
2.4.1
ping...
Quoted 32 lines · Kinglong Mee
If (
dev_id->ids&0xf) <current_id, must updates pos when continue. Otherwise an infinite loop.No other places use the pos value, just move to the top of while.
Signed-off-by Kinglong Mee <[email protected]>--- utils/blkmapd/device-inq.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-)utils/blkmapd/device-inq.c +2
-1@@ -196,6 +196,8 @@ struct bl_serial *bldev_read_serial(int fd, const char *filename)while (pos < (len - devid_len)) { dev_id = (struct bl_dev_id *)&(dev_root->data[pos]); + pos += (dev_id->len + devid_len); +if ((dev_id->ids &0xf ) < current_id)continue ;switch (dev_id->ids &0xf ) {@@ -226,7 +228,6 @@ struct bl_serial *bldev_read_serial(int fd, const char *filename) }if (current_id ==3 )break ; - pos += (dev_id->len + devid_len); } out:if (!serial_out)
Quoted 6 lines · Kinglong Mee
If (
dev_id->ids&0xf) <current_id, must updates pos when continue. Otherwise an infinite loop.No other places use the pos value, just move to the top of while.
Signed-off-by Kinglong Mee <[email protected]>
Sorry for the delay.... Committed!
steved.
Quoted 26 lines
--- utils/blkmapd/device-inq.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-)utils/blkmapd/device-inq.c +2
-1@@ -196,6 +196,8 @@ struct bl_serial *bldev_read_serial(int fd, const char *filename)while (pos < (len - devid_len)) { dev_id = (struct bl_dev_id *)&(dev_root->data[pos]); + pos += (dev_id->len + devid_len); +if ((dev_id->ids &0xf ) < current_id)continue ;switch (dev_id->ids &0xf ) {@@ -226,7 +228,6 @@ struct bl_serial *bldev_read_serial(int fd, const char *filename) }if (current_id ==3 )break ; - pos += (dev_id->len + devid_len); } out:if (!serial_out)