diff options
-rw-r--r-- | fs/coda/upcall.c | 6 |
1 files changed, 3 insertions, 3 deletions
diff --git a/fs/coda/upcall.c b/fs/coda/upcall.c index 9b1ffaa0572e..f6c6c8adbc01 100644 --- a/fs/coda/upcall.c +++ b/fs/coda/upcall.c | |||
@@ -353,7 +353,7 @@ int venus_readlink(struct super_block *sb, struct CodaFid *fid, | |||
353 | char *result; | 353 | char *result; |
354 | 354 | ||
355 | insize = max_t(unsigned int, | 355 | insize = max_t(unsigned int, |
356 | INSIZE(readlink), OUTSIZE(readlink)+ *length + 1); | 356 | INSIZE(readlink), OUTSIZE(readlink)+ *length); |
357 | UPARG(CODA_READLINK); | 357 | UPARG(CODA_READLINK); |
358 | 358 | ||
359 | inp->coda_readlink.VFid = *fid; | 359 | inp->coda_readlink.VFid = *fid; |
@@ -361,8 +361,8 @@ int venus_readlink(struct super_block *sb, struct CodaFid *fid, | |||
361 | error = coda_upcall(coda_vcp(sb), insize, &outsize, inp); | 361 | error = coda_upcall(coda_vcp(sb), insize, &outsize, inp); |
362 | if (!error) { | 362 | if (!error) { |
363 | retlen = outp->coda_readlink.count; | 363 | retlen = outp->coda_readlink.count; |
364 | if ( retlen > *length ) | 364 | if (retlen >= *length) |
365 | retlen = *length; | 365 | retlen = *length - 1; |
366 | *length = retlen; | 366 | *length = retlen; |
367 | result = (char *)outp + (long)outp->coda_readlink.data; | 367 | result = (char *)outp + (long)outp->coda_readlink.data; |
368 | memcpy(buffer, result, retlen); | 368 | memcpy(buffer, result, retlen); |