Skip to content

Commit 3cb2e6d

Browse files
Min Likuba-moo
authored andcommitted
ptp: clockmatrix: bug fix for idtcm_strverscmp
Feed kstrtou8 with NULL terminated string. Changes since v1: -Use sscanf to get rid of adhoc string parse. Changes since v2: -Check if sscanf returns 3. Fixes: 7ea5fda ("ptp: ptp_clockmatrix: update to support 4.8.7 firmware") Signed-off-by: Min Li <min.li.xe@renesas.com> Link: https://lore.kernel.org/r/1606273115-25792-1-git-send-email-min.li.xe@renesas.com Signed-off-by: Jakub Kicinski <kuba@kernel.org>
1 parent 90cf87d commit 3cb2e6d

1 file changed

Lines changed: 16 additions & 33 deletions

File tree

drivers/ptp/ptp_clockmatrix.c

Lines changed: 16 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -103,43 +103,26 @@ static int timespec_to_char_array(struct timespec64 const *ts,
103103
return 0;
104104
}
105105

106-
static int idtcm_strverscmp(const char *ver1, const char *ver2)
106+
static int idtcm_strverscmp(const char *version1, const char *version2)
107107
{
108-
u8 num1;
109-
u8 num2;
110-
int result = 0;
111-
112-
/* loop through each level of the version string */
113-
while (result == 0) {
114-
/* extract leading version numbers */
115-
if (kstrtou8(ver1, 10, &num1) < 0)
116-
return -1;
108+
u8 ver1[3], ver2[3];
109+
int i;
117110

118-
if (kstrtou8(ver2, 10, &num2) < 0)
119-
return -1;
111+
if (sscanf(version1, "%hhu.%hhu.%hhu",
112+
&ver1[0], &ver1[1], &ver1[2]) != 3)
113+
return -1;
114+
if (sscanf(version2, "%hhu.%hhu.%hhu",
115+
&ver2[0], &ver2[1], &ver2[2]) != 3)
116+
return -1;
120117

121-
/* if numbers differ, then set the result */
122-
if (num1 < num2)
123-
result = -1;
124-
else if (num1 > num2)
125-
result = 1;
126-
else {
127-
/* if numbers are the same, go to next level */
128-
ver1 = strchr(ver1, '.');
129-
ver2 = strchr(ver2, '.');
130-
if (!ver1 && !ver2)
131-
break;
132-
else if (!ver1)
133-
result = -1;
134-
else if (!ver2)
135-
result = 1;
136-
else {
137-
ver1++;
138-
ver2++;
139-
}
140-
}
118+
for (i = 0; i < 3; i++) {
119+
if (ver1[i] > ver2[i])
120+
return 1;
121+
if (ver1[i] < ver2[i])
122+
return -1;
141123
}
142-
return result;
124+
125+
return 0;
143126
}
144127

145128
static int idtcm_xfer_read(struct idtcm *idtcm,

0 commit comments

Comments
 (0)