Commit 621eb19ce1ec216e03ad354cb0c4061736b2a436

Authored by J. Bruce Fields
1 parent 2b4cf668a7

svcrpc: Revert "sunrpc/cache.h: replace simple_strtoul"

Commit bbf43dc888833ac0539e437dbaeb28bfd4fbab9f "sunrpc/cache.h: replace
simple_strtoul" introduced new range-checking which could cause get_int
to fail on unsigned integers too large to be represented as an int.

We could parse them as unsigned instead--but it turns out svcgssd is
actually passing down "-1" in some cases.  Which is perhaps stupid, but
there's nothing we can do about it now.

So just revert back to the previous "sloppy" behavior that accepts
either representation.

Cc: stable@vger.kernel.org
Reported-by: Sven Geggus <lists@fuchsschwanzdomain.de>
Signed-off-by: J. Bruce Fields <bfields@redhat.com>

Showing 1 changed file with 5 additions and 1 deletions Side-by-side Diff

include/linux/sunrpc/cache.h
... ... @@ -217,6 +217,8 @@
217 217 static inline int get_int(char **bpp, int *anint)
218 218 {
219 219 char buf[50];
  220 + char *ep;
  221 + int rv;
220 222 int len = qword_get(bpp, buf, sizeof(buf));
221 223  
222 224 if (len < 0)
223 225  
... ... @@ -224,9 +226,11 @@
224 226 if (len == 0)
225 227 return -ENOENT;
226 228  
227   - if (kstrtoint(buf, 0, anint))
  229 + rv = simple_strtol(buf, &ep, 0);
  230 + if (*ep)
228 231 return -EINVAL;
229 232  
  233 + *anint = rv;
230 234 return 0;
231 235 }
232 236