Messages in this thread | | | Subject | memcmp() doesn't | From | "Georg Nikodym" <> | Date | 12 Feb 2002 22:51:26 -0500 |
| |
User's of X86 won't care but the generic memcmp() routine in lib/string.c is incorrect...
The code reads:
/** * memcmp - Compare two areas of memory * @cs: One area of memory * @ct: Another area of memory * @count: The size of the area. */ int memcmp(const void * cs,const void * ct,size_t count) { const unsigned char *su1, *su2; signed char res = 0;
for( su1 = cs, su2 = ct; 0 < count; ++su1, ++su2, count--) if ((res = *su1 - *su2) != 0) break; return res; }
Trouble is that the variable res is not big enough to hold all possible results of a subtraction of two unsigned char quantities.
Changing res to int fixes things (and in the case of ARM, makes the function smaller).
I can supply patches in BK or regular form but I suspect it'd be easier for somebody "in the club" to simply make this change themselves.
-g
- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
| |