Skip to contentSkip to conversation

iscsi: bugfix for displaying IPv6 address

RFC PATCH In review Harvey Harrison 3 participants 3 messages Oct 28, 2008 – Nov 3, 2008 iSCSI boot firmware table (iBFT) driver

lore
Share & tools
lore
#0 lore raw

RFC PATCH 2/5 iscsi: bugfix for displaying IPv6 address

Notice that ip is a u8 *, so currently every other byte is being truncated here.

---
 drivers/firmware/iscsi_ibft.c |    4 +---
 1 files changed, 1 insertions(+), 3 deletions(-)
drivers/firmware/iscsi_ibft.c +1 -3
index 4353414..0a64720 100644
@@ -290,9 +290,7 @@ static ssize_t sprintf_ipaddr(char *buf, u8 *ip)
 		/*
 		 * IPv6
 		 */
-		str += sprintf(str, NIP6_FMT, ntohs(ip[0]), ntohs(ip[1]),
-			       ntohs(ip[2]), ntohs(ip[3]), ntohs(ip[4]),
-			       ntohs(ip[5]), ntohs(ip[6]), ntohs(ip[7]));
+		str += sprintf(str, "%p6", ip);
 	}
 	str += sprintf(str, "\n");
 	return str - buf;
Signature · 1 line
1.6.0.3.729.g6ea410
#1 lore raw
Quoted 3 lines · On Mon, 27 Oct 2008 21:05:17 -0700 Harvey Harrison <[email protected]>…

Notice that ip is a u8 *, so currently every other byte is being truncated here.

I don't understand that bug description. The code looks OK to me?

Quoted 9 lines
---
 drivers/firmware/iscsi_ibft.c |    4 +---
 1 files changed, 1 insertions(+), 3 deletions(-)
drivers/firmware/iscsi_ibft.c +0 -0
index 4353414..0a64720 100644

drivers/firmware/iscsi_ibft.c static ssize_t sprintf_ipaddr(char *buf, u8 *ip) · line 296

Quoted 10 lines
drivers/firmware/iscsi_ibft.c +1 -3
@@ -290,9 +290,7 @@ static ssize_t sprintf_ipaddr(char *buf, u8 *ip)
 		/*
 		 * IPv6
 		 */
-		str += sprintf(str, NIP6_FMT, ntohs(ip[0]), ntohs(ip[1]),
-			       ntohs(ip[2]), ntohs(ip[3]), ntohs(ip[4]),
-			       ntohs(ip[5]), ntohs(ip[6]), ntohs(ip[7]));
+		str += sprintf(str, "%p6", ip);
 	}
 	str += sprintf(str, "\n");
 	return str - buf;

Is the data format which sprintf_ipaddr() is parsing specific to iscsi? If not, that helper function is generic and shouldn't be buried down in drivers/firmware/iscsi_ibft.c?

#2 lore raw
Quoted 7 lines · Andrew Morton
Quoted 3 lines · On Mon, 27 Oct 2008 21:05:17 -0700 Harvey Harrison <[email protected]>…

Notice that ip is a u8 *, so currently every other byte is being truncated here.

Quoted 6 lines

I don't understand that bug description. The code looks OK to me?

drivers/firmware/iscsi_ibft.c static ssize_t sprintf_ipaddr(char *buf, u8 *ip) · line 293

Quoted 4 lines
drivers/firmware/iscsi_ibft.c +1 -3
-		str += sprintf(str, NIP6_FMT, ntohs(ip[0]), ntohs(ip[1]),
-			       ntohs(ip[2]), ntohs(ip[3]), ntohs(ip[4]),
-			       ntohs(ip[5]), ntohs(ip[6]), ntohs(ip[7]));
+		str += sprintf(str, "%p6", ip);

If ip is a u8 * these ntohs are operating on bytes which is bogus, and NIP6_FMT expects to get 8 u16s, not 8 u8s.

johannes